디렉토리를 백업하는 데 사용합니다 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 문서각 옵션에 대한 정보가 포함된 맨페이지.