让我们首先创建两个内容相同的文件:
echo "content" > file1
echo "content" > file2
现在,如果我们使用gzip
压缩每个文件,那么这些文件是完全相同的,不出所料:
gzip --no-name file1
gzip --no-name file2
diff -u file1.gz file2.gz
(不出所料,diff
命令不返回任何输出。)
但是,假设我们使用文件执行此操作:
tar cf - file1 | gzip --no-name > file1.tar.gz
tar cf - file2 | gzip --no-name > file2.tar.gz
当我们运行diff
时会发生什么?
% diff -u file1.tar.gz file2.tar.gz
Binary files file1.tar.gz and file2.tar.gz differ
这对我来说很惊讶。我需要将哪些选项传递给tar
,以便两个tar ... | gzip ...
命令的输出相同?
供参考,当我跑
时tar cf - file | gzip --no-name > file1.tar.gz
tar cf - file | gzip --no-name > file2.tar.gz
输出相同。所以不 tar
的输出正在根据我运行它的时间而改变,所以必须是tar
将其输入的最后修改时间合并到焦油输出。这不是我想要的行为。
答案 0 :(得分:4)
TAR file format包含文件名和其他目录信息,因此文件会有所不同,除非它们包含具有相同名称,大小等的相同文件。
答案 1 :(得分:0)
要查看正在发生的事情,请查看此内容
echo "tea" > file1
echo "tea" > file2
现在运行以下两个命令。
tar cf - file1
tar cf - file1 | gzip -c --no-name | gunzip -c
您会注意到在这两种情况下输出都是相同的,即gzip的选项--no-name
没有任何影响(它确实删除了它自己的时间戳,但它没有&t; t从tar输出中删除文件名)。这是因为文件名是tar格式的一部分,而gzip不解析它从tar获取的内容。这就是为什么当你拥有相同的文件名时,你会获得相同的相同输出。