tar.gz에서 특정 파일을 추출하는 방법


105

큰 tar.gz 파일에서 특정 파일을 어떻게 추출 할 수 있습니까? 이 질문에서 tar에서 파일을 추출하는 프로세스를 찾았 지만 언급 한 명령을 시도했을 때 오류가 발생했습니다.

$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

그런 다음 파일을 tar.gz어떻게 추출 합니까?


모든 솔루션은 먼저 전체 아카이브의 압축을 풀어야합니다. superuser.com/questions/655739/… 이를 피하려면 zip과 같은 다른 형식을 사용해야합니다. ZIP은 개별 파일을 개별적으로 압축하므로 압축률이 낮습니다. superuser.com/questions/1013309/… 단일 파일을 추출하는 속도와 기능을 모두 지원하는 형식이 있는지 궁금합니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

답변:


119

당신은 또한 사용할 수 있습니다 tar -zxvf <tar filename> <file you want to extract>

표시된대로 파일 이름을 정확하게 작성해야 tar ztf test.tar.gz합니다. 예를 들어 ./extract11, 또는 이라고 some/bunch/of/dirs/extract11표시하면 파일이 해당 이름으로 표시되고 필요한 디렉토리가 자동으로 생성됩니다.

  • -x: tar에게 파일을 추출하도록 지시합니다.
  • -f: 파일 이름 / 타르볼 이름을 지정합니다.
  • -v: 상세 (파일을 추출하는 동안 진행률 표시)
  • -z: gzip을 통해 아카이브를 필터링하고 .gz 파일을 압축 해제하는 데 사용합니다.

$ tar -zxvf test.tar.gz extract11 tar: extract11: Not found in archive tar: Error exit delayed from previous errors
Ankit Vashistha

1
다음이 시도 tar tf archive.tar.gz | grep extract11extract11 아카이브에인지 여부를 확인 호야
harish.venkat

8
표시된대로 파일 이름을 정확하게 작성해야 tar ztf test.tar.gz합니다. 예를 들어 ./extract11, 또는 이라고 some/bunch/of/dirs/extract11표시하면 파일이 해당 이름으로 표시되고 필요한 디렉토리가 자동으로 생성됩니다.
vonbrand

여기에 요점을 추가하고 -z싶습니다. HP-UX와 같은 일부 UNIX 버전 에서는 옵션이 작동하지 않습니다.
Ankit Vashistha

1
@ pj-brunet : 아니오, f끝이 없어야합니다. 그러나 파일 이름 바로 뒤에 와야합니다. tar 이름 다음에 다른 모든 옵션이있는이 예제는 제대로 작동합니다 tar -f mytar.tar.gz -zxv dir/somefile. "mytar.tar.gz"에서 "dir / somefile"을 추출합니다.
mivk

34

tarball이라는 lotsofdata.tar.gz파일이 있고 원하는 파일이 하나만 있다는 것을 알고 있지만 그 이름에 단어가 포함되어 있다는 것만 기억하십시오 contract. 두 가지 옵션이 있습니다.

tarball의 내용을 사용 tar하고 grep나열하여 알고있는 부분과 일치하는 파일의 전체 경로와 이름을 찾은 다음 tar해당 파일을 추출하여 정확한 세부 사항을 알 수 있습니다. 또는 두 가지를 사용할 수 있습니다. 작은 알려진 스위치는 파일 이름에 대해 거의 알지 못하는 것과 일치하는 모든 파일을 추출하기위한 것입니다.이 옵션의 전체 이름이나 경로의 일부를 알 필요는 없습니다. 세부 사항은 다음과 같습니다.

옵션 1

$ tar -tzf lotsofdata.tar.gz | grep contract

이름에 알려진 부분이 포함 된 모든 파일의 세부 사항이 나열됩니다. 그런 다음 원하는 것을 추출하십시오.

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>

./작동하려면 경로 앞에 필요할 수 있습니다 .

옵션 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'

당신이 더 쉽게 또는 가장 유용하다고 생각하는 당신까지.


드랏. 마지막 명령의 오타 : -xzf를 복제했습니다. 해당 스위치의 인스턴스는 하나만 있어야합니다.
Wendy Cricks

tar -xzf lotsofdata.tar.gz <full path and filename from your list above>제공 withour 나를 위해 일한 ./전체 경로의 시작
user13107

당신은 이것에 인내심을 가지고 시간이 걸렸을 수도 있습니다 ... 또한 아마도 분명하지만, 디렉토리가 아직 존재하지 않더라도 현재 디렉토리에서 전체 디렉토리 구조를 추출 할 것입니다.
PJ Brunet

BSD tar (적어도 macOS에서는)는이 --wildcards옵션을 지원하지 않습니다 . 나는 여전히와 비슷한 행동을 할 수있었습니다 -x -O *foo. *foo파일이 foo로 끝나는 것을 알았 기 때문에 필자의 경우 파일 이름 글로브였습니다.
Eric Hu

6

다른 날 수천 개의 파일로 tarball에서 몇 백 개의 파일을 추출하려고했습니다. 필요한 파일은 단일 와일드 카드로 참조 할 수 없습니다. 그래서 나는 구글을 검색 하고이 페이지를 발견했다.

그러나 위의 트릭 중 어느 것도 내 작업에 좋지 않은 것 같습니다. 나는 남자를 읽고 결국이 옵션을 찾았 --files-from으므로 최종 해결책은

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -

그것은 매력처럼 작동합니다.

업데이트 : 목록 파일의 형식이와 같아야합니다 tar -tvf. 그렇지 않으면 파일을 추출 할 수 없습니다.


2

중괄호를 생략하면 예가 효과적입니다.

$ tar --extract --file=test.tar.gz extract11

파일 extract11이 하위 폴더에있는 경우 tarball 내에 경로를 지정해야합니다.

$ tar --extract --file=test.tar.gz subfolder/extract11

$ tar --extract --file=test.tar.gz extract11 tar: extract11: Not found in archive tar: Error exit delayed from previous errors
Ankit Vashistha

그런 다음 obi 파일에 tar11이 없습니다. 상대 경로를 제공해야합니다. 편집 참조
Bernhard

1

tar.gz 파일에서 특정 파일을 추출하는 예는 아래를 참조하십시오.

로컬 파일에서 :

$ tar xvf file.tgz path/README.txt 2nd_file.txt

원격 URL에서 :

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.