在 tar.gz 文件中发现大小为零的 tar.gz 文件

在 tar.gz 文件中发现大小为零的 tar.gz 文件

我当前的目录包含一个这样的文件-

$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

您将不会在屏幕上看到任何内容。

相关内容