背景:我目前正在编写一个归档脚本,该脚本从某些文件夹及其内容创建压缩的 tarball。它应该能够将 gzip 压缩的存档与源同步,而无需解压缩存档或压缩源。为此,寻求的解决方案是将 的输出ls -l与 的输出同步tar -ztvf。
这两个命令都返回类似的输出,但略有不同。大多数差异可以通过正则表达式或 来解决cut。我无法轻松解决的一件事是以最大深度列出相对于查询目录的文件路径。
为了克服这个问题,我曾经找到每个文件,并使用以下命令find将它们输入:ls
find Webcam -exec ls -lR --time-style="+%Y-%m-%d %H:%M" {} \; | cut -f1,3- -d" " | sed "s/ /\//2" | sed "s/ \+/ /g"
Run Code Online (Sandbox Code Playgroud)
其中大部分管道用于格式化目的,find Webcam -exec ls -lR {} \;是有问题的部分,并且Webcam是测试文件夹。该命令的输出如下:
-rw-r--r-- debian/debian 162406 2014-04-12 13:42 2014-04-12-134210.jpg
-rw-r--r-- debian/debian 116247 2014-08-09 16:38 2014-08-09-163849.jpg
-rw-r--r-- debian/debian 96597 2015-03-15 19:39 2015-03-15-193905.jpg
-rw-r--r-- debian/debian 100795 2015-04-29 20:23 2015-04-29-202242.jpg
-rw-r--r-- …Run Code Online (Sandbox Code Playgroud) 如果我制作一个.tar.gz过孔
tar czvf - ./myfiles/ | pigz -9 -p 16 > ./mybackup.tar.gz,
我可以通过以下方式安全地解压缩目录中已经gzip 的文件吗./myfiles/an_old_backup.tar.gz ./myfiles
gzip -d mybackup.tar.gz
tar -xvf mybackup.tar
cd myfiles
gzip -d an_old_backup.tar.gz
tar -xvf an_old_backup.tar
Run Code Online (Sandbox Code Playgroud)
?可以无限安全地进行这种递归压缩吗?
当我在 tar 中使用 -p 选项(保留权限)时,是否需要在创建和提取存档期间都使用该选项,还是仅需要其中之一?
我无法找到这个问题的明确答案,“man tar”也没有说清楚。
所以,我想知道您是否可以告诉我,以下哪个需要“p”:
$ tar cpf archive.tar source-files # Create an archive.
$ tar xpf archive.tar # Extract the archive.
Run Code Online (Sandbox Code Playgroud)
我很想知道是否只有一个命令需要“p”,而不是只使用在两者中都使用“p”的全面解决方案。
当我执行 tar 命令时,例如:
tar -xzvf xxxxxxxx
tar -zcvf xxxxxxxx
Run Code Online (Sandbox Code Playgroud)
该-v参数会降低操作的性能还是可以忽略不计?
我发现跟踪繁重操作的进度很有用,但我想知道是否可以保留它。
我没有主机,dpkg所以我需要安装它。
我按照这里和这里的说明进行操作。
在这两个答案中,他们都写道我需要下载文件:
wget http://security.ubuntu.com/ubuntu/pool/main/d/dpkg/dpkg_1.17.5ubuntu5.2_i386.deb
or
wget http://security.ubuntu.com/ubuntu/pool/main/d/dpkg/dpkg_1.17.5ubuntu5.2_amd64.deb
Run Code Online (Sandbox Code Playgroud)
并tar像这样使用:
tar x dpkg*.deb data.tar.gz
tar xfvz data.tar.gz ./usr/bin/dpkg
cp ./usr/bin/dpkg /usr/bin/
Run Code Online (Sandbox Code Playgroud)
但是运行后tar x dpkg*.deb data.tar.gz失败了:
[root@webtl1 ~]# tar x dpkg*.deb data.tar
tar: Refusing to read archive contents from terminal (missing -f option?)
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)
我点击了这个链接:
https : //askubuntu.com/questions/143107/how-to-extract-archives-to-file-system-in-terminal
并尝试使用tar xvzf dpkg*.deb data.tar.gz 但它也失败了:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: …Run Code Online (Sandbox Code Playgroud) 我有一个名为 的 tar 存档backup.tar。我想将一个名为 的文件添加sshd.conf到此tar存档中。
我使用命令创建了一个存档tar -cvf filename.tar files,在这个选项中,详细选项只是向我显示了我已存档的所有文件的列表。当我使用时tar -tf filename.tar,它再次简单地向我显示了已存档的所有文件的列表。我预计详细选项会显示有关存档中文件的一些额外详细信息,但没有显示。然后我终于使用了该命令tar -tvf filename.tar,但这里的文件列表得到了很好的解释,其中包含一些与该ls -l命令类似的额外功能和细节。所以我很困惑该-v选项的实际目的是什么,因为它在不同的上下文中给出不同的结果以及它与该-t选项有何不同。
我试图根据一些正则表达式压缩目录中的所有文件夹,所以我使用 grep 过滤掉输出,现在我需要使用 tar 和文件夹名称。
例如我想 .tar.gz 每个顶级目录到它自己的存档。目录名称必须以“web_”开头,不能以“.tar.gz”结尾。
如何将 grep 输出捕获到变量,使其看起来像这样:
find . -maxdepth 1 -mindepth 1 -type d -print | grep -v \.tar\.gz$ | grep ^\./web_ | exec tar -czf $name.tar.gz $name
Run Code Online (Sandbox Code Playgroud)
或使用 ls -h
ls -h | grep -v \.tar\.gz$ | grep ^web_ | exec tar -czf $name.tar.gz $name
Run Code Online (Sandbox Code Playgroud)
选择“查找...”:
root@4a94aef49e3a:/home# find . -maxdepth 1 -mindepth 1 -type d -print | grep -v \.tar\.gz$ | grep ^web_
./web_demozip1
./web_demozip2
Run Code Online (Sandbox Code Playgroud)
选择“ls -h”:
root@4a94aef49e3a:/home# ls -h | grep -v \.tar\.gz$ …Run Code Online (Sandbox Code Playgroud) 在 Linux Ubuntu 中,关于这些版本的“tar”命令:
tar -tzf /path/to/filename.tar.gz # Show the content
tar -xzf /path/to/filename.tar.gz # Extract the content
Run Code Online (Sandbox Code Playgroud)
观察这两个命令都使用该z选项,并且它们按预期工作。
通过man tar,关于该z选项,表明:
-z, --gzip, --gunzip, --ungzip
Filter the archive through gzip(1).
Run Code Online (Sandbox Code Playgroud)
问题
tar使用命令?gzip'z'额外问题
关于Filter the archive through gzip(1).部分。
"filter"为什么上面显示的两个命令中需要它?或 的含义或上下文是什么filter?我需要从(34G)中提取特定文件夹。.tar.bz2问题是需要1个小时。我猜这是由于压缩造成的。我想对特定文件夹进行不压缩提取会更快。
因此,是否可以.tar从获得.tar.bz2?
我正在尝试创建一个存档:
$ cd /tmp
$ tar -czf test1.tar.gz -C ~/Downloads/dir1 -C ~/Documents/dir2 -C ~/dir3/dir4/dir5
Run Code Online (Sandbox Code Playgroud)
...这不应该保留其中目录的完整路径,因此-C
结果
tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
Run Code Online (Sandbox Code Playgroud)
为什么?如何修复它?
我是 Debian 用户。当我尝试时,apt-get install <package>我得到了这个:
tar: ./es_DO/LC_ADDRESS: Cannot write: No space left on device
tar: ./es_DO/LC_IDENTIFICATION: Cannot write: No space left on device
tar: ./es_DO/LC_MONETARY: Cannot write: No space left on device
tar: ./es_DO/LC_TELEPHONE: Cannot write: No space left on device
tar: ./zh_CN.gbk/LC_ADDRESS: Cannot write: No space left on device
tar: ./zh_CN.gbk/LC_IDENTIFICATION: Cannot write: No space left on device
tar: ./zh_CN.gbk/LC_MESSAGES/SYS_LC_MESSAGES: Cannot write: No space left on device
tar: ./zh_CN.gbk/LC_MONETARY: Cannot write: No space left on device
tar: …Run Code Online (Sandbox Code Playgroud)