![전체 경로가 있는 아카이브를 가지지만 tarbomb을 생성하지 않는 방법은 무엇입니까?](https://linux55.com/image/222299/%EC%A0%84%EC%B2%B4%20%EA%B2%BD%EB%A1%9C%EA%B0%80%20%EC%9E%88%EB%8A%94%20%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B8%8C%EB%A5%BC%20%EA%B0%80%EC%A7%80%EC%A7%80%EB%A7%8C%20tarbomb%EC%9D%84%20%EC%83%9D%EC%84%B1%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
원본 파일의 절대 경로 정보를 유지하는 아카이브 파일을 생성하고 싶은데, 타르폭탄을 발생시키지 않는 방법을 찾을 수 없었나요?
구체적으로, 이러한 파일(*.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
따라서 경로 앞에 슬래시가 없습니다.