Rozpakowywanie partii plików


33

Kiedy próbuję

 unzip filename.zip

to działa. Muszę jednak rozpakować serię plików zip.

Dlaczego:

 find . -name "*.zip" -print0 | xargs -0 unzip

lub

 ls *.zip | xargs unzip

nie działa?

W obu przypadkach pojawia się komunikat „Uwaga: nazwa pliku nie pasuje:”.

Odpowiedzi:


48

Możesz wydać polecenie:

$ unzip '*.zip'

Zajrzyj tutaj w celach informacyjnych .


Nie powiedziałem tego jasno, ale nie wszystkie są w tym samym katalogu. Potrzebuję wyników find.
jeannoburto,

4
Dzięki. To może idealnie pasować do rzeczywistego pytania, ale to rozwiązało mój problem. Próbowałem unzip *i wrócił caution: filename not matcheddo każdego pliku, ale unzip '*.zip'wykonał zadanie.
Ivan

27

Twoje polecenia nie działają, ponieważ umieszczają wszystkie pliki w tym samym wierszu poleceń. Chociaż działa to z większością programów, unzippierwszy argument będzie traktowany jako plik zip, a dowolny późniejszy jako plik do rozpakowania. Musisz wykonać polecenie raz dla każdego pliku:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

Lub

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

Drugi wydaje się lepszy na wypadek, gdyby naprawdę było dużo plików. (W przeciwnym razie narzekał, że polecenie jest zbyt długie w przypadku xargs)
Recct

5

W bash możesz również wykonać następujące czynności:

for i in *.zip; do
    unzip "$i"
done

unzipMożesz także -dprzełączyć przełącznik, abyś mógł skierować dane wyjściowe do różnych lokalizacji.

Na przykład:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

Jest o wiele łatwiejsze rozwiązanie niż podane powyżej, użyj -dflagi katalogu :

unzip -o somefiles.zip -d $directoryPath

-dokreśla katalog do wyodrębnienia, a nie katalog do wyszukiwania plików.
LegendaryDude
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.