我当前的目录包含一个这样的文件-
$ls -l
-rw-r--r-- 1 root staff 8 May 28 09:10 pavan
现在,我想像这样 tar 和 gzip 这个文件
$tar -cvf - * 2>/dev/null |gzip -vf9 > pavan.tar.gz 2>/dev/null
(我知道我正在与原始文件相同的目录中创建压缩文件)
当我运行上述 tar/gzip 命令约 20 次时,有几次我发现最终的 tar 和压缩文件pavan.tar.gz
有一个大小为零的pavan.tar.gz
文件。我不确定这个大小为零的文件是从哪里进入存档的。
笔记:我不会对已经存在的 tar.gz 文件运行 tar/gzip 命令。在运行命令之前,我始终确保目录中只有一个文件。在谷歌上搜索,如所述这里,我怀疑正在创建的 tar.gz 也是正在归档的文件的一部分。但就我而言,gzip
是创建最终文件的人,到gzip
运行时,tar
应该已经完成了 tar 打包。
这发生在 AIX 上,但我也使用了 Linux 标签来引起更多注意,因为我猜测这个问题与平台无关。
答案1
您正在输入“管道”命令。您的解释器(bash 等)创建一个管道并执行两个命令(生成 2 个进程 - tar 和 gzip)。在此过程中,bash 多次分叉,并且无法确定您的目标文件是在命令扩展pavan.tar.gz
之前还是之后创建的。*
tar
答案2
如果您只有一个文件,并且担心它会随着时间而改变,那么您可以使用
cat pavan | gzip -f9 > pavan.gz
补充评论:
如果你bash
可以尝试否定选择
因此!(pavan.tar.gz)
你将选择所有文件,但是pavan.tar.gz
tar -zcf pavan.tar.gz !(pavan.tar.gz)
最终--ignore-command-error
答案3
我不明白为什么使用 -v 然后将其重定向到 dev/null ?删除 -v 和 dev/null 如下:
焦油-cf-*| gzip -f9 > pavan.tar.gz
您将不会在屏幕上看到任何内容。