![tar xf 명령으로 파일을 찾을 수 없음](https://linux55.com/image/15511/tar%20xf%20%EB%AA%85%EB%A0%B9%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%9D%8C.png)
전체 tar.gz에서 파일을 추출하려고 하는데 작동하지 않습니다. 문제를 시뮬레이션하는 데 사용하는 명령은 다음과 같습니다.
mkdir test
touch test/version.txt
echo "1.0.2" > test/version.txt
tar zcvf rootfs.tar -C test .
gzip -f -9 -n -c rootfs.tar > rootfs.tar.gz
tar xf rootfs.tar.gz version.txt
tar: version.txt: Not found in archive
tar: Exiting with failure status due to previous errors
이유를 알려주실 수 있나요? 위의 tar.gz에 version.txt 파일이 있습니다.
답변1
rootfs.tar
gzip으로 압축된 tar 아카이브입니다. rootfs.tar.gz
gzip으로 두 번 압축된 tar 아카이브입니다. Tar는 이중 압축으로 인해 혼란스러워서 오류를보고하지 않고 파일을 빈 아카이브로 취급합니다.
두 번 압축하는 것은 의미가 없으므로 이 추가 gzip 단계를 제거하세요. 혼동을 피하기 위해 전달하는 경로가 . 로 시작하므로 압축을 풀 rootfs.tar.gz
때 .로 시작하는 경로를 전달해야 합니다. tar는 경로의 작업을 무작동으로 처리하지 않습니다 .rootfs.tar
tar
.
./
./
mkdir test
touch test/version.txt
echo "1.0.2" > test/version.txt
tar zcvf rootfs.tar.gz -C test .
tar xf rootfs.tar.gz ./version.txt
./
파일 이름에 접두사가 붙지 않도록 하려면 --transform
아카이브를 생성할 때 이를 사용할 수 있습니다.
tar zcvf rootfs.tar.gz --transform='s!^\./!!' -C test .
tar xf rootfs.tar.gz version.txt