일부 파일을 결정적으로 보관해야 파일 내용이 동일하면 동일한 보관 파일을 얻을 수 있습니다. 나중에 아카이브 파일의 동등성을 테스트하려면 이 정보가 필요합니다.
그러나 tar에는 타임스탬프 정보가 포함되어 있으므로 파일 내용이 동일하더라도 다른 아카이브 파일을 얻습니다.
타임스탬프 정보가 포함되지 않은 아카이브(tar, zip 등)를 어떻게 만들 수 있나요?
tar --diff
참고: 두 tar 파일이 다르더라도 타임스탬프를 무시하고 또는 와 같은 도구를 사용하여 해당 내용만 비교할 수 있다는 것을 알고 있습니다 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 등).
정말 멍청한 파일을 작업에 비교하고 싶다면 다음과 같은 파일 이름 헤더로 파일을 고정하는 일반 셸을 제안할 수 있습니다.
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.