tar 아카이브에 저장된 파일 이름 제어

tar 아카이브에 저장된 파일 이름 제어

파일 시스템 전체에 흩어져 있는 다양한 파일을 포함하는 tar 아카이브를 만들고 싶습니다.

$ tar czvf outfile.tar.gz /some/file /some/other/filename

이렇게 하면 아카이브가 성공적으로 생성되지만 압축을 풀면 파일이 원래 위치와 일치하는 디렉터리 트리에 계속 남아 있습니다.

$ tar xvf outfile.tar.gz
some/file
some/other/filename

나는 둘 다 현재 디렉토리로 추출하여 스스로 생성할 수 있기를 file원합니다 .filename

를 사용하여 추출하는 동안 이 작업을 수행할 수 있습니다 --transform. 예를 들면 다음과 같습니다.

$ tar xvf outfile.tar.gz --transform=s,.*/,,

이것은 내 요구 사항을 충족하지만 추출할 때 모호한 옵션을 사용해야 하는 것이 약간 짜증나고 다른 사람에게 보내기가 더 어려워지는 등의 문제가 있습니다.

생성할 때 다음을 수행할 수 있습니다.

$ cd tmpdir
$ cp /some/file /some/other/filename .
$ tar czvf outfile.tar.gz *

그러나 이것은 특히 파일이 크거나 많을 때 약간 무거워 보입니다.

tar생성 시 저장된 파일 이름을 직접 제어할 수 있는 방법이 있나요 ?

답변1

--transform그럼 아카이브 생성시 작동하지 않나요? 내 GNU tar 1.27.1에서 작동하는 것 같습니다.

$ tar czf out.tar.gz some/foo some/other/bar --transform=s,.*/,,
$ tar tzf out.tar.gz 
foo
bar

작동하지 않으면 또 다른 가능성은 현재 디렉터리에 있는 파일에 연결하는 것입니다( 에서 했던 것과 같지만 cp를 사용함 ln).

$ ln /some/foo /some/other/bar .
$ tar czf out.tar.gz foo bar

답변2

라는 매우 유용한 도구가 있습니다.치치파일을 편집하는 데 사용할 수 있습니다 tar.

tardy -Remove_Prefix 55 outfile.tar.gz transformed.tar.gz

이는 55에 있는 모든 디렉터리의 최대 깊이보다 큰 임의의 숫자입니다 outfile.tar.gz. 파일 이름에서 최대 55개의 선행 디렉터리를 제거 -Remove_Prefix 55하도록 지시합니다 .tardy

관련 정보