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

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

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

이 작업을 수행하는 올바른 방법입니까? 명령 줄 출력없이 시간이 오래 걸리는 것 같습니다 …

설명

  • 절대 또는 상대 경로를 사용 했습니까? 옳게 보이는 것 외에는 상대적이어야합니다. 실행한지 얼마나되었고 시스템은 얼마나 좋은가요? 빠른 시스템에서는 적어도 몇 분 정도 걸립니다. 잠재적으로 한 시간 이상? ' 지금 테스트를 실행 중입니다.
  • 예, ~ 1 시간 후에 완료되었지만 절대 경로가 잘못되었습니다. 맞았습니다.
  • Linux에서는 tarcat /proc/$(pidof tar)/fdinfo/0를 사용하여 아카이브에서 얼마나 멀리 있는지 확인할 수 있습니다 (하나 이상의 tar 프로세스 실행 중).
  • 중요한 부분은 후행 슬래시도 없습니다. folder/folder2/를 사용하면 ' 작동하지 않습니다.

답변

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 절대 경로를 보관합니다. 따라서 압축을 풀기 전에 항상 큰 아카이브의 내용을 확인하는 것이 좋습니다.

댓글

  • --strip-components=N는 여기에 유용 할 수 있습니다.
  • 제 경우에는 iv id = “23 대신 ./foldername/를 작성해야했습니다. 16b5075f “>

, tar를 만들 때 tar -cvf santi.tar ./*로 만들었고 "로 만들었 기 때문인 것 같습니다. 나열 됨 " tar 이것이 말한 내용입니다. drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/

  • 그리고 .gz?
  • @PeterKrauss는 -xvf-xzvf로 변경합니다 (-z 옵션) 및 분명히 foo.tar에서 foo.tar.gz 또는 아카이브 이름이 무엇이든간에. -j (bz2) 및 일부 최신 버전 인 -J (xz)에 대해서도 동일하게 적용됩니다. 그렇지 않으면 zcat foo.tar.gz | tar -xvf - …와 같은 파이프 라인도 작동합니다.
  • 추출하는 동안 모든 자세한 출력에 지쳤 으면 . 예 : tar -tf foo.tartar -xf foo.tar ....
  • 답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다