tar가 파일/디렉토리의 마지막 수정 시간을 무시하도록 만드는 방법

tar가 파일/디렉토리의 마지막 수정 시간을 무시하도록 만드는 방법

디렉토리를 백업하는 데 사용합니다 tar. 일부 파일/디렉터리는 last-modified-time업데이트되지만 내용은 그대로 유지됩니다. 카탈로그 파일의 내용이 수정되지 않은 경우 바이너리 파일이 포함된 tarball을 얻고 싶습니다.

그러나 last-modified-time업데이트될 때마다 결과 tarball의 바이너리는 달라집니다.

tar무시할 수 있는 방법이 있나요 last-modified-time? 이렇게 하면 내용이 변경되지 않는 한 동일한 바이너리를 얻을 수 있습니다.

답변1

TAR에서 고정된 mtime을 찾고 있을 뿐만 아니라 파일 자체가 동일하다면 비트 단위로 동일한 tarball을 찾고 있는 것으로 보입니다. 이것은 실제로 사람들이 생각하는 것보다 더 복잡합니다.

귀하의 상황에 따라 모든 사항이 관련되지는 않을 수 있지만 완전성을 위해 여기에 나열하겠습니다. GNU tar에서는 다음을 수행할 수 있습니다:

  • 를 사용하여 mtime을 설정하십시오 --mtime=<date>. 버전 1.29(Debian 1.28-1)부터 --clamp-mtime지정된 mtime보다 최신/최신 파일에 대해서만 파일의 실제 mtime을 설정할 수 있습니다. 생성된 파일에 공통 타임스탬프를 제공하지만 파일을 유지하려면 다음을 수행하세요. 유용함) 다른 파일을 분리하세요.
  • 아카이브에서 예측 가능한 파일 순서를 사용합니다 --sort=name(GNU tar 1.28 이상). 기본 동작은 --sort=none파일을 디렉터리 순서대로 저장하는 것입니다.
  • --owner=0 --group=0 --numeric-owner소유자를 설정합니다(다른 사용자로부터 TAR을 생성하는 경우).
  • 다른 umask로 인해 권한이 다를 수 있습니다. chmod아카이브를 생성하기 전에 사용하거나 --mode=<CHANGES>일관성을 위해 변경하는 데 사용됩니다.

반복 가능한 빌드 계획에는비트별 동일한 아카이브 생성에 대한 좋은 기사.

이 문서에서는 다른 TAR 구현에도 적용될 수 있는 이전 tar 버전에 대한 몇 가지 해결 방법도 제공합니다. mtime에 대한 구체적인 해결 방법은 touch이를 사용하여 TAR을 생성하기 전에 특정 날짜 이전의 모든 파일에 대해 mtime을 고정 값으로 설정할 수 있다는 것입니다. 아카이브에서 예측 가능한 순서를 얻으려면 순서가 지정된 파일 목록을 사용하여 TAR에 전달하십시오 find.sort

find build -print0 | LC_ALL=C sort -z
  | tar --no-recursion --null -T - -cf product.tar

보다GNU TAR 문서각 옵션에 대한 정보가 포함된 맨페이지.

관련 정보