타임스탬프 없이 파일 보관

타임스탬프 없이 파일 보관

일부 파일을 결정적으로 보관해야 파일 내용이 동일하면 동일한 보관 파일을 얻을 수 있습니다. 나중에 아카이브 파일의 동등성을 테스트하려면 이 정보가 필요합니다.

그러나 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.

관련 정보