파일 시스템 전체에 흩어져 있는 다양한 파일을 포함하는 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