압축 파일에서 특정 디렉토리로 특정 파일 만 추출


150

경로를 알고있는 ZIP 파일에서 단일 파일을 추출해야합니다. 다음과 같은 명령이 있습니까?

unzip -d . myarchive.zip path/to/zipped/file.txt

불행하게도, 위의 명령은에서 파일의 전체 경로를 추출하고 다시 만듭니다 ./path/to/zipped/file.txt. 파일을 지정된 디렉토리로 간단하게 꺼내는 방법이 있습니까?

답변:


130

다음 -p옵션 을 사용하여 텍스트 만 표준 출력으로 추출 할 수 있습니다 .

unzip -p myarchive.zip path/to/zipped/file.txt >file.txt

메타 데이터 (날짜, 권한 등)는 추출하지 않고 파일 내용 만 추출합니다. 그것은 나중에 파일을 이동할 필요가 없다는 편의를 위해 지불하는 가격입니다.

또는 아카이브를 디렉토리로 마운트하고 파일을 복사하십시오. 로 에서 avfs :

mountavfs
cp -p ~/.avfs"$PWD/myarchive.zip#"/path/to/zipped/file.txt .

또는 퓨즈 우편으로 :

mkdir myarchive.d
fuse-zip myarchive.zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d

2
@TK Kocheran : 왜 테스트하지 않습니까? 첫 번째 명령을 테스트했으며 작동했습니다.
사용자가 알 수 없음

1
@ TKKocheran : Jar 파일은 zip이므로 unzip 및 fuse-zip 메소드는 분명히 작동합니다. AVFS 방법도 작동합니다. AVFS는 파일 이름을 기반으로 형식을 추측하고 알고 있기 때문입니다 .jar. 파일 이름이 다른 경우 AVFS에 zip 처리기를 사용하도록 지시해야 할 수 있습니다 (예 :) ~/.avfs$PWD/foo.apk#uzip/META-INF.
Gilles 2016 년

1
실제로 ZIP 아카이브에서 JAR / 이진 파일을 추출하는 것을 의미했습니다. 아직 테스트 할 기회가 없었습니다. 위의 첫 번째 명령을 사용하여 이진 파일을 추출하는 데 문제가 있습니까?
Naftuli Kay

2
@ TKKocheran : 문제가 없으며 -p파일을 그대로 추출합니다 ( -c텍스트 변환 수행).
Gilles

2
@Myles의 대답은 출력 리디렉션이 필요하지 않고 파일 속성을 유지하기 때문에보다 우아하다고 생각합니다.
gertvdijk

152
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

파일 이름뿐만 아니라 압축 파일의 전체 경로를 입력하십시오. zip 파일 내에서 본 구조를 유지하십시오.

이것은 하나의 파일을 추출 할 file.txtmyarchive.zip/path/to/unzip/to/file.txt.


18
이것이 더 나은 대답입니다.
redburn

1
생성 된 파일 이름을 다른 경우 처리하지 않습니다.
Oleg Vaskevich

6
"-j"매개 변수 : 정크 경로. 아카이브의 디렉토리 구조는 다시 작성되지 않습니다. 모든 파일은 추출 디렉토리 (기본적으로 현재 디렉토리)에 저장됩니다. "-d"매개 변수 : 파일을 exdir로 추출
e1i45

1
@OlegVaskevich, 질문은 다른 파일 이름을 요구하지 않습니다
Tapemaster

그래, 알아 여전히 투표권이 있습니다. :)
Oleg Vaskevich

24

더 간단한 버전 :

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

PATH_OF_FILE_INSIDE_ARCHIVE현재 디렉토리에서 다시 생성 되지만 지정된 파일 만 추출합니다.

Zip 보관 파일의 모든 파일을 나열하려면

unzip -l ARCHIVE_NAME

1
허용되는 답변보다 훨씬 간단합니다.
FractalSpace

실제로, 잘 작동하고 더 간단합니다
Mahmoud Ali

2

기본적으로 Info-Zip을 사용하는 macOS

먼저 파일을 나열하여 원하는 것을 찾으십시오.

unzip -l my.zip

그런 다음 아카이브에서 추출 할 파일 목록을 제공하십시오.

unzip my.zip annoying/path/to/file

표준 출력을 위해 -p와 결합

unzip -p my.zip annoying/path/to/file >./file

1
사람들이 명백한 이유없이 왜 공감하는지 이해가되지 않습니다. 정답입니다 (macOS 용은 아님)
FractalSpace

@FractalSpace 특허 적으로는 아니지만 OP가 원하는 것과 반대입니다.
Konrad Rudolph

열쇠는 개별 파일을 얻는 것입니다. -p 플래그를 사용하여 표준 출력 및 리디렉션에 대한 출력 사소한,하지만 난 명시 적으로 추가 한
카메론 로웰 팔머

2

간단한 사용 :

unzip zipfile.zip path/inside/zip/file.txt

파일이 팽창합니다.

$ unzip -l ./../html.zip | grep wp-config

     3328  07-22-2019 15:10   html/wp-config.php

     2898  01-07-2019 23:30   html/wp-config-sample.php

$ unzip ./../html.zip html/wp-config.php

     Archive:  ./../html.zip
     inflating: html/wp-config.php

$ ls -lrth

     total 4.0K
     drwxr-sr-x 2 apache apache 4.0K Jul 26 14:41 html

$ ls -lrth html/*

     total 4.0K
     -rw-rw-rw- 1 apache apache 3.3K Jul 22 15:10 wp-config.php

-d outpath파일을 넣을 위치를 지정하기 위해 인수를 추가 할 수도 있습니다 .
Efren

-j압축 경로를 피하 라는 주장
Efren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.