답변:
GNU 버전은 옵션과 별명 을 tar
지원하므로 다음 과 같이 사용할 수 있습니다--transform
--xform
tar --transform "s/^$MYPATH/$VERSION/" -cf archive.tar.bz2 "$MYPATH"
예를 들어,이 디렉토리 트리가 주어지면
foo
└── foo.txt
명령
tar --transform "s/^foo/bar/" -cf foo.tar.bz2 foo
같은 아카이브를 생성합니다
$ tar -tf foo.tar.bz2
bar/
bar/foo.txt
flags=r;
는 stackoverflow.com/a/29661783/388803에 언급 된대로 문제를 해결합니다 .
s/^a\//b\//
, 다른 모든 파일이 아래에있는 동안 tar -t
스틸이 표시 a/
됩니다 b/
. 나는 이것이 위험한 것으로 가정하고 tar 파일의 디렉토리가 아닌 동일한 접두사를 가진 다른 파일로부터 실제로 보호 할 필요가 없습니다. 따라서 후행 슬래시가 좋지 a/
않으므로 변환되는 경우를 처리하는 가장 좋은 방법을 알고 있지만 aa/
루트 노드의 형제 인 경우는 아닙니다 .
편안 디렉토리 접두어를 추가하려면보다 다른 구분 기호를 사용 /
에 --transform
인수, 예를 들어, +
또는 ,
앤디의 대답처럼.
따라서 더 간단한 경우 현재 디렉토리에 많은 파일이 있으며 tarbomb 을 만들고 싶지 않습니다 .
tar czf logs_nightly.tar.gz --tranform 's+^+logs_nightly/+' *.log
구문은 s+search+replace+
이며 ^
단순히 파일 이름의 시작과 일치합니다.
이제 OP에 대답하기 위해 다음 /tmp
을 실행 하여 전체 디렉토리를 복사하지 않아도 됩니다.
mv $MYPATH $VERSION
tar cjf archive.tar.bz2 $VERSION
mv $VERSION $MYPATH
또는
ln $MYPATH $VERSION
tar cjf archive.tar.bz2 $VERSION
(하드 링크, 심볼릭 링크 문제 방지)
마지막 두 가지는 엔터테인먼트 가치에 포함되었으며, 나는 toro2k의 대답에 충실 할 것입니다.
tar cjf archive.tar.bz2 $MYPATH
?