모든 디렉토리와 파일이 알파벳 순서로 처리되는 tar 파일을 만들고 싶습니다. 이것은 전체 디렉토리 계층에 대한 것이므로, 첫 번째 디렉토리를 알파벳순으로 처리 한 다음 하위 디렉토리를 알파벳순으로 처리하는 것으로 시작합니다. 맨 페이지를 살펴본 결과 스위치를 찾을 수 없습니다.
나는 반 참신, 반 약간의 최적화라는 것을 인정할 것이다. 나는 이것을 할 수있는 쉬운 방법이 없다고 믿을 수 없다. 뭔가 빠졌을 것입니다.
모든 디렉토리와 파일이 알파벳 순서로 처리되는 tar 파일을 만들고 싶습니다. 이것은 전체 디렉토리 계층에 대한 것이므로, 첫 번째 디렉토리를 알파벳순으로 처리 한 다음 하위 디렉토리를 알파벳순으로 처리하는 것으로 시작합니다. 맨 페이지를 살펴본 결과 스위치를 찾을 수 없습니다.
나는 반 참신, 반 약간의 최적화라는 것을 인정할 것이다. 나는 이것을 할 수있는 쉬운 방법이 없다고 믿을 수 없다. 뭔가 빠졌을 것입니다.
답변:
Slartibartfast는 올바른 길에 있지만 tar의 기본 동작은 디렉토리로 내려가는 것이므로 생성 된 tar 파일에 포함 된 동일한 파일의 사본을 두 개 이상 얻을 수 있습니다. 당신은 수행하여 확인할 수 있습니다
tar tf file.tar | sort
해결 방법은 타르에 --no-재귀 옵션을 포함하는 것입니다. 또한 -print0
옵션을 사용하여 찾은 다음 --null
옵션을 tar 로 사용 하여 이상한 파일 이름을 보낼 수 있어야합니다 . 최종 결과는 다음과 같습니다.
find paths -print0 | sort -z | tar cf tarfile.tar --no-recursion --null -T -
를 사용하여 tar 파일의 순서를 확인할 수 있습니다 tar tsf tarfile.tar
. 줄 바꿈 문자가 포함 된 파일 이름을 발견하지 못한다면 -print0, -z 및 --null 옵션이 필요하지는 않지만 시도한 적이 없습니다.
tar 파일 내의 파일 순서는 실제로 중요하지 않습니다. 파일을 추출 할 때 파일 시스템은 순서를 유지하지 않기 때문입니다.
이것에 대한 스위치는 없지만 실제로 원한다면 tar에 파일 이름 목록을 정렬 된 순서로 제공 할 수 있으며 tar는 파일 순서대로 tar 파일을 만듭니다.
% tar cf tarfile tmp/diff.txt src/hellow.c junkimage.IMG barry/thegroup
% tar tf tarfile
tmp/diff.txt
src/hellow.c
junkimage.IMG
barry/thegroup
tar tf tarfile | sort
이름에 줄 바꿈이있는 파일이 없다고 가정합니다.
find /source_directory -print | sort | tar -czf target.tgz -T -
그래도 작동하지 않으면 (시도하지 않았으므로 -T 인수의 stdin을 의미합니다) :
find /source_directory -print | sort > /tmp/temporary_file_list
tar -czf target.tgz -T /tmp/temporary_file_list
그렇다면 왜 문제가 있습니다. 그러나 때로는 묻지 않는 것이 더 쉽습니다.
@CharlieHerron의 답변에 대한 대안으로 컨텐츠 (파일, symlink) 및 폴더 메타 데이터 (예 : 폴더 권한, mtime 등)를 보존하는 데 관심이 있다면 find
의 출력에서 폴더를 필터링 할 수 있습니다 .
find paths -not -type d -print 0 | sort -z | tar cf tarfile.tar --null -T -