我需要確定性地歸檔一些文件,以便在文件內容相同的情況下獲得相同的歸檔文件。我需要這個來測試存檔文件的相等性。
但是,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
我嘗試用zip -X
代替tar
,但得到了相同的結果
答案1
即使您以某種方式完全禁用時間戳,我也不能 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;
如果您願意,當然可以對其進行 gzip 壓縮。並注意始終保留順序。
答案2
為了比較 Zip 檔案的內容,您可以使用開源 comp_zip 工具@https://sourceforge.net/projects/unzip-ada/或者https://github.com/zertovitch/zip-ada/。
命令是comp_zip file1.zip file2.zip
;有詳細程度的開關。
答案3
您可以使用此選項--mtime
設定顯式時間戳記:
$ tar --help
...
Handling of file attributes:
...
--mtime=DATE-OR-FILE set mtime for added files from DATE-OR-FILE
...
$ tar --version
tar (GNU tar) 1.29
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore and Jay Fenlason.