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.
감사해요!✌️