큰 tar.gz 아카이브에서 단일 폴더를 어떻게 추출합니까?


132

5GB 아카이브 에서이 명령을 사용하고 있습니다

tar -zxvf archive.tar.gz /folder/in/archive

이것이 올바른 방법입니까? 커맨드 라인 출력없이 영원히 걸리는 것 같습니다 ...


절대 또는 상대 경로를 사용 했습니까? 옳은 것 이외의 상대적인 것이어야합니다. 얼마나 오래 운영했고 시스템이 얼마나 좋습니까? 그것은 걸릴 것 이상 빠른 컴퓨터에서 몇 분. 잠재적으로 1 시간 이상? 지금 테스트를 진행하고 있습니다.
Kevin

예, ~ 1 시간 후에 완료되었지만 절대 경로가 잘못되었습니다.
개럿 홀

5
리눅스에서, 당신은 아카이브가 지금까지로 방법을 볼 수 있습니다 tar함께 cat /proc/$(pidof tar)/fdinfo/0(둘 이상있는 경우 명령을 적응 tar실행중인 프로세스).
Gilles

중요한 부분은 또한 슬래시가 없습니다. 사용 folder/folder2/이 작동하지 않습니다.
Marki555

답변:


145

tar기본적 으로 상대 경로 저장합니다 . GNU tar는 절대 경로를 저장하려고하면 다음과 같이 말합니다.

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

특정 폴더를 추출해야 할 경우 tar 파일의 내용을 살펴보십시오.

tar -tvf foo.tar

정확한 파일 이름을 적어 둡니다. 내 foo.tar파일 의 경우 다음과 같이 /home/foo/bar말 하여 추출 할 수 있습니다 .

tar -xvf foo.tar home/foo/bar # Note: no leading slash

따라서, 귀하가 게시 한 방식이 (필수적으로) 올바른 방식이 아닙니다. 슬래시를 생략해야합니다. 절대 경로를 시뮬레이션하려면 cd /먼저 수행 하고 수퍼 유저인지 확인하십시오. 또한 이것은 동일합니다.

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

tar경로를 상대 경로로 변환 하는 데는 분명하고 좋은 이유가 있습니다. 하나는 원본이 아닌 다른 장소에서 아카이브를 복원하는 기능입니다. 다른 하나는 보안입니다. 아카이브를 추출하고 해당 파일이 현재 작업 디렉토리에 나타날 것으로 예상하고 실수로 다른 곳에서 시스템 파일 (또는 자신의 작업)을 덮어 쓸 수 있습니다.

참고 :이 -P옵션 을 사용하면 절대 경로 tar 보관 됩니다 . 따라서 추출하기 전에 항상 큰 아카이브의 내용을 확인해야합니다.


36
--strip-components=N여기에 도움이 될 수 있습니다.
Acumenus

2
내 경우에 쓸 필요가 있었다 ./foldername/대신 foldername, 내가 타르를 만들 때 나는 그것을 만든 때문이었다고 생각 tar -cvf santi.tar ./*나는 타르를 "나와"때 그것은 말이고drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
산티아고 arizti

1
그리고 약 .gz?
Peter Krauss

1
변경 @PeterKrauss -xvf-xzvf합니다 (추가 -z옵션)을 명백하게 foo.tarfoo.tar.gz또는 어떤 아카이브의 이름은. -j(bz2)와 일부 최신 버전 -J(xz)도 마찬가지 입니다. 그렇지 않으면 같은 파이프 라인 zcat foo.tar.gz | tar -xvf - …도 작동합니다.
Alexios

그리고 추출하는 동안 모든 자세한 출력에 지쳤다면 v모든 예제에서 건너 뛰십시오 . 예, tar -tf foo.tar하고 tar -xf foo.tar ....
보 R
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.