전체 경로가 있는 아카이브를 가지지만 tarbomb을 생성하지 않는 방법은 무엇입니까?

전체 경로가 있는 아카이브를 가지지만 tarbomb을 생성하지 않는 방법은 무엇입니까?

원본 파일의 절대 경로 정보를 유지하는 아카이브 파일을 생성하고 싶은데, 타르폭탄을 발생시키지 않는 방법을 찾을 수 없었나요?

구체적으로, 이러한 파일(*.zip 또는 *.tgz 등)을 포함하는 (압축) 아카이브를 만들고 싶다고 가정해 보겠습니다.

/usr/share/foo/bsd/config.yaml
/usr/share/foo/linux/config.yaml
/usr/share/foo/windows/config.yaml

...원본 파일의 전체 경로에 인코딩된 정보를 보존하고 싶습니다.

이상적으로는 아카이브를 추출할 때 다음 파일을 생성해야 합니다.

./<BASENAME>/usr/share/foo/bsd/config.yaml
./<BASENAME>/usr/share/foo/linux/config.yaml
./<BASENAME>/usr/share/foo/windows/config.yaml

...여기서는 <BASENAME>아카이브 파일의 기본 이름(확장자 제외)을 나타냅니다.

이를 수행할 수 있는 한 가지 방법은 ./<BASENAME>/usr/share/foo/{bsd,linux,windows}디렉토리를 생성하고, 해당 디렉토리 내의 적절한 파일에 대한 심볼릭 링크를 생성하고, 디렉토리 아카이브 ./<BASENAME>(디렉토리 링크에 항목을 추가할 때 기호가 역참조되도록 하는 데 필요할 수 있는 플래그 포함) 아카이브를 생성하는 것입니다. ) rm -rf ./<BASENAME>아카이브 파일이 준비된 후에 실행하세요.

덜 힘든 방법이 있나요?

답변1

내 접근 방식은 다음과 유사합니다.

tar -Pczvf ./test.tgz /usr/share/foo/{bsd,linux,windows}

GNU TAR 사용:
-P: 절대 이름
-c: 생성
-z: gzip 압축
-v: 자세한 출력
-f: 아카이브의 파일 이름

그러면 포함된 파일에 대한 절대 경로가 포함된 압축된 아카이브가 제공됩니다. 그런 다음 사용하려는 라이브러리에 아카이브를 추출 -C하거나 다음 명령을 다시 사용하여 파일을 절대 위치에 추출할 수 있습니다 -P.

tar -xzvf ./test.tgz -C $BASENAME
tar -Pxzvf ./test.tgz

답변2

다음과 같은 상대 경로를 사용해 볼 수 있습니다.

cd /
tar cvf path/to/tar_file.tar usr/share/foo/{bsd,linux,windows}/config.yaml

따라서 경로 앞에 슬래시가 없습니다.

관련 정보