[Ubuntu, OSX] tar 파일 생성 시 파일이름이 정렬된 형태로 tar하기 Computer Tip

바로 이전에 포스팅 했던 find와 xargs 이용하기와도 관련이 있습니다.

그동안 특정 폴더의 내용을 tar.gz 으로 만들기 위하여

$ tar -cvfz foo.tgz folder
와 같은 식으로 많이 tar파일을 생성하였습니다.

그런데 tar -tvfz foo.tgz 를 해보면
folder 안에 있는 파일이 정렬된 형태로 들어가 있지 않는 문제가 발생합니다.

만약 정렬된 형태로 tar를 묶을 필요가 있다면 
다음과 같은 명령을 실행하면 됩니다.

$ find folder -print0 | sort -z | tar --no-recursion --null -cvf foo.tar -T - && gzip foo.tar

위의 명령을 설명하면,
folder 디렉터리의 모든 파일 목록을 출력하는데 '\0' 구분자로 출력하고 이를 파이프로 받아
sort 명령으로 정렬을 시키는데 구분자는 '\0' 이며 이를 다시 파이프로 받아
tar를 시키는데 이미 목록에 recursive 하게 정보가 포함되므로 --no-recursion 옵션과
'\0' 구분자를 인식하기 위한 --null 옵션을 준 다음 이전 목록으로 tar하라는
-T 옵션과 stdin 으로 받아들이라는 '-' 것의 내용입니다.
(tar에서 압축하라는 z 옵션은 실패합니다)
그리고 이 명령이 성공하면 "&&" 다음 명령인
gzip foo.tar 를 실행하고 결과 파일인 foo.tar.gz 이 생성됩니다.

이를 정확하게 이해한다면 많은 *nix 명령의 철학을 잘 이해하는 것이라 할 수 있겠네요.

덧글

댓글 입력 영역

구글애드텍스트