我需要确定性地归档一些文件,以便在文件内容相同的情况下获得相同的归档文件。我需要这个来测试存档文件的相等性。
但是,tar 包含时间戳信息,因此即使文件内容相同,我也会得到不同的存档文件。
如何创建不包含时间戳信息的存档(使用 tar、zip 或其他文件)?
注意:我知道即使两个 tar 文件不同,我也可以忽略它们的时间戳并仅使用tar --diff或 等工具比较它们的内容tarsum。但是,我不允许使用任何其他外部工具进行比较(因为我的设置);我只能测试两个存档文件是否完全相等。
注意:我知道我可以在归档文件之前将所有文件的时间戳设置为给定值,因此它们的时间戳将是相同的。但是文件很多,我不想这样做。我只想归档这些文件,没有时间戳信息
例子:
$ mkdir copy1
$ touch copy1/file1
$ touch copy1/file2
$ sleep 60
$ mkdir copy2
$ touch copy2/file1
$ touch copy2/file2
$ ls -l copy1
total 0
-rw-r--r-- 1 david wheel 0 Oct 27 00:59 file1
-rw-r--r-- 1 david wheel 0 Oct 27 00:59 file2
$ ls -l copy2
total 0
-rw-r--r-- 1 david wheel 0 Oct 27 01:00 file1
-rw-r--r-- 1 david wheel 0 Oct 27 01:00 file2
# the content of those files is the same; they only differ by the their timestamp
$ (cd copy1; tar -cvf ../copy1.tar .)
$ (cd copy2; tar -cvf ../copy2.tar .)
$ tar -tvf copy1.tar
drwxr-xr-x 0 david wheel 0 Oct 27 00:59 ./
-rw-r--r-- 0 david wheel 0 Oct 27 00:59 ./file1
-rw-r--r-- 0 david wheel 0 Oct 27 00:59 ./file2
$ tar -tvf copy2.tar
drwxr-xr-x 0 david wheel 0 Oct 27 01:00 ./
-rw-r--r-- 0 david wheel 0 Oct 27 01:00 ./file1
-rw-r--r-- 0 david wheel 0 Oct 27 01:00 ./file2
$ diff copy1.tar copy2.tar
Binary files copy1.tar and copy2.tar differ
Run Code Online (Sandbox Code Playgroud)
我尝试用zip -X代替tar,但得到了相同的结果
小智 0
即使您以某种方式完全禁用时间戳,我也不能 100% 确定它在每种情况下都会拯救您。事实上,文件的顺序可能会改变结果(即“tar cf a.tar file1 file2”与“tar cf b.tar file2 file1”不同,但根据您的规范,内容是相同的,并且顺序可能取决于文件系统)。
我建议您必须做一些比您所说的文件比较更清晰的事情(md5sum 等)。
如果你真的想要一个愚蠢的文件与工作相比,我可能会建议一个简单的 shell,它用文件名头来粘贴文件,例如:
for i in file1 file2; do echo "$i"; cat $i; done;
Run Code Online (Sandbox Code Playgroud)
如果您愿意,当然可以对其进行 gzip 压缩。并注意始终保留顺序。
| 归档时间: |
|
| 查看次数: |
4359 次 |
| 最近记录: |