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

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

대용량 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?

답변1

당신은 또한 사용할 수 있습니다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: .gz 파일의 압축을 푸는 데 사용되는 gzip을 통해 압축된 패키지를 필터링합니다.
  • -t: 아카이브의 내용을 나열합니다.

답변2

lotsofdata.tar.gz이라는 tarball이 있고 그 안에 원하는 파일이 있다는 것만 알고 있지만 이름에 단어가 포함되어 있다는 것만 기억할 수 있다고 가정 해 보겠습니다 contract. 두 가지 옵션이 있습니다.

알고 있는 부분과 일치하는 파일의 전체 경로와 이름을 찾을 수 있도록 타르볼의 내용을 사용 tar하고 나열한 다음 (이제 정확한 세부 사항을 알았으므로) 해당 파일을 추출하거나 두 가지 작은- 알려진 스위치는 파일 이름에 대해 거의 알지 못하는 항목과 일치하는 모든 파일만 추출합니다. 이 옵션에서는 전체 이름이나 경로의 일부를 알 필요가 없습니다. 세부사항은 다음과 같습니다:greptar

옵션 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*'

어느 것이 더 쉽고 가장 유용한지를 결정하는 것은 귀하에게 달려 있습니다.

답변3

얼마 전 나는 수천 개의 파일이 포함된 타르볼에서 수백 개의 파일을 추출하려고 했습니다. 필요한 파일은 단일 와일드카드로 참조할 수 없습니다. 그래서 구글링을 하다가 이 페이지를 발견했습니다.

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

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

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

고쳐 쓰다:목록 파일은 에 표시된 것과 동일한 형식이어야 합니다. tar -tvf그렇지 않으면 파일을 추출할 수 없습니다.

답변4

중괄호를 생략하면 귀하의 예가 나에게 효과적입니다.

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

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

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

관련 정보