tar에 대해 다른 "최상위" 이름을 어떻게 지정합니까?

tar에 대해 다른 "최상위" 이름을 어떻게 지정합니까?

tar 루트(/)를 tar 아카이브에 /abc로 표시하고 싶습니다.

사용자 정의 최상위 이름을 지정하기 위한 tar 플래그가 있습니까?

답변1

내가 찾을 수있는 가장 가까운 것은 --transform옵션입니다. 확실하지는 않지만 이것이 GNU 전용 플래그인 것 같습니다.

 --transform, --xform EXPRESSION
       use sed replace EXPRESSION to transform file names

sed이를 사용하여 교체 명령을 전달 하고 다음 /과 같이 변경할 수 있습니다 /abc.

tar cf root.tgz --transform 's/^\//\/abc/' /

/아카이브를 생성할 때 경로는 계속 인쇄되지만 /abc아카이브를 추출하면 경로가 됩니다.


tar해당 옵션이 없는 경우 --transform다른 접근 방식은 /abc심볼릭 링크를 만든 /다음 tar하는 것입니다.

$ ln -s / /abc
$ tar chf root.tgz /abc

이는 사람들에게 링크를 따르도록 -h지시하므로 중요합니다 .tar

 -h, --dereference
       follow symlinks; archive and dump the files they point to

/abc이는 최상위 디렉토리로 설정되는 효과를 갖습니다.

답변2

GNU tar를 사용하면 다음 명령을 사용할 수 있습니다.

tar --transform="s|/|/abc/|" -Pcf bar.tar /

그렇지 않은 경우 GNU 또는 기타 특정 tar 확장에 의존하지 않지만 모든 Unix 호환 시스템에서 사용할 수 있는 POSIX 도구를 기반으로 하는 이식 가능한 접근 방식은 다음과 같습니다.

pax -w -s '/\//\/abc\//' -f foo.tar /

답변3

제가 하는 방법은 다음과 같습니다. (/뿐만 아니라) 어떤 위치에서든 뜨거운 효과를 발휘할 수 있습니다.

tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *

/abc/각 경로의 시작 부분에 a를 추가합니다 .

답변4

@terdon의 훌륭한 답변을 바탕으로 좀 더 "설교적인" 예를 들면...

tar -czf "MY_NEW_FOLDER_NAME.tar.gz" --transform "s/^\.\/MY_FOLDER_NAME/MY_NEW_FOLDER_NAME/" "./MY_FOLDER_NAME"

중요한:^\.\/MY_FOLDER_NAME대상 디렉터리 "./MY_FOLDER_NAME"에 대한 경로가 정확하게 반영되어야 합니다 .

정규식을 작성해 볼 수 있습니다. SED 호환 온라인 이스케이프 문자그리고GNU sed REPL.

감사해요!✌️

관련 정보