Rozpakuj wszystkie pliki w katalogu


203

Mam katalog plików ZIP (utworzonych na komputerze z systemem Windows). Mogę ręcznie rozpakować je za pomocą unzip filename, ale jak mogę rozpakować wszystkie pliki ZIP w bieżącym folderze za pomocą powłoki?

Korzystanie z Ubuntu Linux Server.

Odpowiedzi:


395

To działa w trybie bash, zgodnie z tym linkiem :

rozpakuj \ *. zip


2
Potrzebowałem odwrotnego ukośnika z Zsh . Nie znam powodu, dla którego byłbyś potrzebny, jeśli używasz Bash.
Don McCurdy

Co stanie się ze zduplikowanymi plikami? Myślę, że to po prostu zastąpi?
kerner1000

Działa świetnie na macOS 😀
Ahi Tuna

1
W ten sposób otrzymuję niezgodną nazwę pliku dla wszystkich plików zip w katalogu
thebeancounter

1
Wersja z cytatami działała dla mnie na WSL. W nazwach plików były również spacje, FWIW.
Max Candocia

107

Wystarczy wpisać kilka cytatów, aby uniknąć znaku zastępczego:

unzip "*.zip"

2
+1 Ten działał dla mnie. Musiałem rozpakować nazwy plików w określonym formacie, ograniczając resztę. Po prostu zachowałem odpowiedni format w podwójnych cudzysłowach i działało to jak urok. Dane wyjściowe mówią mi o liczbie pomyślnie przetworzonych archiwów.
Lalit Kumar B,

Pięknie działał na podsystemie Ubuntu dla Windows, 18.11.2018. Najlepsza odpowiedź nie działała.
julianstanley,

64

Poniższy skrypt bash wyodrębnia wszystkie pliki zip w bieżącym katalogu do nowych katalogów z nazwą pliku zip, tj .:

Następujące pliki:

myfile1.zip
myfile2.zip 

Zostanie wyodrębniony do:

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

Skrypt powłoki:

#!/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
To jest rzecz, aby podbić wszystkie rzeczy. Nie mogę uwierzyć, że nie jest głosowany wyżej
billynoah

Nie dotyczy to spacji w nazwach plików.
David Oliver,

1
Wystarczy dodać cudzysłowy "do nazwy pliku
CONvid19

1
„uratował mi dzień! dzięki! Robię pętlę, rozpakuj, wykonaj akcję, skopiuj, grep coś, usuń. Brakowało sposobu przejścia z file.gz do pliku jako zmiennej w skrypcie bash
thahgr

38

rozpakuj * .zip, lub jeśli są w podfolderach, to coś podobnego

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

unzip przetwarza symbole wieloznaczne, więc plik o nazwie „* .zip” nie spełni oczekiwań.
geocar

3
W rzeczywistości zrobi to dokładnie to, czego się spodziewano, wynik operacji wyszukiwania jest przekazywany do rozpakowania
John Bargman

1
Spowoduje to wyodrębnienie wszystkich plików zip z bieżącego katalogu. Co zrobić, jeśli chcę, aby pliki zip (obecne w podfolderach) zostały wyodrębnione w odpowiednich podfolderach?
Rishabh Agrahari,

2
@RishabhAgrahari Odpowiedziałem na twój komentarz w nowej odpowiedzi .
jojo

w przypadku gzip'edplików użyj gunzip -rfk .do rekurencyjnego rozpakowywania w odpowiednich folderach
Devaroop

17

Rozpakuj wszystkie .zippliki i zapisz zawartość w nowym folderze o tej samej nazwie i w tym samym folderze co .zipplik:

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

To jest rozszerzenie odpowiedzi @ phatmanace i adresuje komentarz @ RishabhAgrahari :

Spowoduje to wyodrębnienie wszystkich plików zip z bieżącego katalogu. Co zrobić, jeśli chcę, aby pliki zip (obecne w podfolderach) zostały wyodrębnione w odpowiednich podfolderach?


1
w przypadku gzip'edplików użyj gunzip -rfk .do rekurencyjnego rozpakowywania w odpowiednich folderach
Devaroop

2
Korzystanie find: illegal option -- nz UnZip 6.00 - ktoś jeszcze?
DannyDannyDanny

find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;Zapomniałeś katalogu.
SaundersB

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

Spowoduje to rozpakowanie wszystkich archiwów zip do nowych folderów o nazwach nazw plików archiwów zip.

a.zip b.zip c.zipzostaną rozpakowane a b codpowiednio w folderach.


6

aunpack -e *.zip, z atoolzainstalowanym. Ma tę zaletę, że inteligentnie radzi sobie z błędami i zawsze rozpakowuje się do podkatalogów, chyba że zip zawiera tylko jeden plik. Zatem nie ma niebezpieczeństwa zanieczyszczenia bieżącego katalogu masą plików, tak jak ma to miejsce w przypadkuunzip pliku zip bez struktury katalogów.


6

W dowolnej powłoce POSIX spowoduje to rozpakowanie do innego katalogu dla każdego pliku zip:

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

1
Lub jako liniowiec: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
Świetnie dla mnie. Rozpakuj odpowiednio w podfolderach
podpisz

Bezpieczniej jest po prostu zrobić for file in *.zip; do ...dobrze?
peterflynn,

1

Jeśli pliki są gzip'd. Następnie użyj:

gunzip -rfk .

z katalogu głównego, aby rekurencyjnie wyodrębniać pliki w odpowiednich katalogach, zachowując oryginalne (lub usuń, -kaby je usunąć)


0

Jest to wariant Pedro Lobito odpowiedź używając Jak pętli katalogu rekursywnie usunąć pliki o określonych rozszerzeniach nauk:

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

-2
for i in `ls *.zip`; do unzip $i; done

14
Niebezpieczne użycie LS. Co zrobić, jeśli masz plik o nazwie „-j -o -d .. jackass.zip”
geocar


-3

Posługiwać się

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

rozpakować folder w systemie Linux


Spowoduje to rozpakowanie tylko jednego pliku. Pytanie polega na rozpakowaniu wszystkich folderów
Vivek Panday

Szczerze mówiąc, tytuł „Rozpakuj wszystkie pliki w katalogu” może być niejednoznaczny, a także oznaczać „Rozpakuj pojedyncze archiwum do osobnego katalogu”.
jdersen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.