디렉토리의 모든 파일 압축 해제


203

ZIP 파일 디렉토리가 있습니다 (Windows 시스템에서 생성됨). 을 사용하여 수동으로 압축을 풀 수 unzip filename있지만 셸을 통해 현재 폴더의 모든 ZIP 파일을 어떻게 압축 해제 할 수 있습니까?

우분투 리눅스 서버 사용하기.

답변:


395

링크 에 따르면 bash에서 작동 합니다 .

압축 해제 \ *. zip


2
Zsh 와 함께 백 슬래시가 필요했습니다 . Bash를 사용하는 경우 필요한 이유를 모르겠습니다.
Don McCurdy

중복 파일은 어떻게됩니까? 그냥 무시할 것 같아요?
kerner1000

macOS 😀에서 훌륭하게 작동
Ahi Tuna

1
이 작업을 수행 할 때 디렉토리에있는 모든 zip 파일에 대해 파일 이름이 일치하지 않습니다.
beancounter

1
따옴표가있는 버전은 WSL에서 나를 위해 일했습니다. 파일 이름에도 공백이 있습니다 (FWIW).
Max Candocia

107

와일드 카드를 피하기 위해 따옴표를 넣으십시오.

unzip "*.zip"

2
+1 이것은 나를 위해 일했다. 나머지를 제한하면서 특정 형식의 파일 이름을 압축 해제해야했습니다. 방금 일치하는 형식을 큰 따옴표로 묶어 매력처럼 작동했습니다. 출력은 성공적으로 처리 된 아카이브 수를 알려줍니다.
Lalit Kumar B

2018 년 11 월 18 일 Windows 용 Ubuntu 하위 시스템에서 아름답게 작업했습니다. 최고 답변이 작동하지 않았습니다.
julianstanley

64

다음 bash 스크립트는 현재 디렉토리의 모든 zip 파일을 zip 파일의 파일 이름을 사용하여 새 디렉토리로 추출합니다.

다음 파일들 :

myfile1.zip
myfile2.zip 

다음으로 추출됩니다 :

./myfile1/files...
./myfile2/files...

쉘 스크립트 :

#!/bin/sh
for zip in *.zip
do
  dirname=`echo $zip | sed 's/\.zip$//'`
  if mkdir "$dirname"
  then
    if cd "$dirname"
    then
      unzip ../"$zip"
      cd ..
      # rm -f $zip # Uncomment to delete the original zip file
    else
      echo "Could not unpack $zip - cd failed"
    fi
  else
    echo "Could not unpack $zip - mkdir failed"
  fi
done

4
이것이 모든 것을 정복하는 것입니다. 믿을 수 없어 더 높은 투표 아니에요
billynoah

파일 이름의 공백은 다루지 않습니다.
David Oliver

1
그냥 "파일 이름 에 따옴표 를 추가
CONvid19

1
`내 하루를 구했다! 감사! 나는 루프를 풀고, 압축을 풀고, 행동을 수행하고, 복사하고, 무언가를 grep하고, 제거합니다. 누락 된 것은 bash 스크립트에서 file.gz에서 변수로 파일로 이동하는 방법이었습니다
thahgr

38

unzip * .zip 또는 하위 폴더에있는 경우

find . -name "*.zip" -exec unzip {} \;

unzip은 와일드 카드 처리를 수행하므로 "* .zip"이라는 파일은 예상대로 작동하지 않습니다.
geocar

3
실제로 이것은 정확히 예상 된 작업을 수행 할 것입니다. 찾기 작업의 결과는 압축이 풀
립니다.

1
이것은 현재 디렉토리의 모든 zip 파일을 추출 할 것입니다. 만약 zip 파일 (하위 폴더에 있음)을 각 하위 폴더에서 추출하려면 어떻게해야합니까?
Rishabh Agrahari 8

2
@RishabhAgrahari 나는 새로운 답변으로 귀하의 의견을 해결했습니다 .
jojo

대한 gzip'ed파일 사용 gunzip -rfk .각 폴더 내부 순환의 압축을 풀어줍니다
Devaroop

17

모든 .zip파일의 압축을 풀고 파일과 이름이 같은 폴더에 새 폴더에 내용을 저장 .zip하십시오.

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

이것은 @phatmanace의 답변의 확장이며 @RishabhAgrahari의 의견을 다루고 있습니다 .

이것은 현재 디렉토리의 모든 zip 파일을 추출 할 것입니다. 만약 zip 파일 (하위 폴더에 있음)을 각 하위 폴더에서 추출하려면 어떻게해야합니까?


1
대한 gzip'ed파일 사용 gunzip -rfk .각 폴더 내부 순환의 압축을 풀어줍니다
Devaroop

2
UnZip 6.00find: illegal option -- n 사용 하기 -다른 사람이 있습니까?
DannyDannyDanny

find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;디렉토리 목록을 잊어 버렸습니다.
SaundersB

16
for i in *.zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

이렇게하면 모든 zip 아카이브가 zip 아카이브의 파일 이름으로 명명 된 새 폴더로 압축 해제됩니다.

a.zip b.zip c.zipa b c폴더에 각각 압축이 풀립니다 .


6

aunpack -e *.zip과가 atool설치되어 있어야합니다. zip에 하나의 파일 만 포함되어 있지 않으면 지능적으로 오류를 처리하고 항상 서브 디렉토리로 압축을 푸는 이점이 있습니다. 따라서 unzip디렉토리 구조가없는 zip에있는 것처럼 대량의 파일로 현재 디렉토리를 오염시킬 위험이 없습니다 .


6

POSIX 쉘에서, 이것은 각 zip 파일에 대해 다른 디렉토리에 압축을 풉니 다 :

for file in *.zip
do
    directory="${file%.zip}"
    unzip "$file" -d "$directory"
done

1
또는 one-liner로서 :for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
peterflynn


2

for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done


1
나에게 큰. 하위 폴더에서 각각 압축 해제
44 초

for file in *.zip; do ...올바르게 하는 것이 더 안전 합니까?
peterflynn

1

파일이 gzip'd입니다. 그런 다음 사용하십시오.

gunzip -rfk .

루트 디렉토리에서 원래 디렉토리를 유지하여 각 디렉토리에서 파일을 재귀 적으로 추출하십시오 (또는 삭제 -k하여 제거하십시오 ).


0

이것은의 변종이다 페드로 로비 투의 답변을 사용하여 특정 확장자를 가진 파일 삭제에 재귀 적으로 디렉토리를 통해 루프를 어떻게 가르침 :

shopt -s globstar
root_directory="."

for zip_file_name in **/*.{zip,sublime\-package}; do
    directory_name=`echo $zip_file_name | sed 's/\.\(zip\|sublime\-package\)$//'`
    printf "Unpacking zip file \`$root_directory/$zip_file_name\`...\n"

    if [ -f "$root_directory/$zip_file_name" ]; then
        mkdir -p "$root_directory/$directory_name"
        unzip -o -q "$root_directory/$zip_file_name" -d "$directory_name"

        # Some files have the executable flag and were not being deleted because of it.
        # chmod -x "$root_directory/$zip_file_name"
        # rm -f "$root_directory/$zip_file_name"
    fi
done



-3

사용하다

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

리눅스에서 폴더를 풀려면


단일 파일 만 압축 해제합니다. 질문은 모든 폴더의 압축을 푸는 것입니다
Vivek Panday

공평하게 말하면, "디렉토리의 모든 파일 압축 해제"라는 제목 모호 할 수 있으며 "단일 아카이브를 별도의 디렉토리에 압축 해제"를 의미합니다.
jdersen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.