Decomprimere un batch di file


33

Quando ci provo

 unzip filename.zip

Funziona. Tuttavia, devo decomprimere una serie di file zip.

Perché sei:

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

o

 ls *.zip | xargs unzip

non funziona?

In entrambi i casi viene visualizzato il messaggio "attenzione: nome file non corrispondente:".

Risposte:


48

È possibile emettere il comando:

$ unzip '*.zip'

Guarda qui come riferimento .


Non l'ho detto chiaramente, ma non sono tutti nella stessa directory. Quindi, ho bisogno dell'output di find.
jeannoburto,

4
Grazie. Questo potrebbe corrispondere perfettamente alla domanda reale, ma questo ha risolto il mio problema. Ci stavo provando unzip *ed è tornato caution: filename not matchedper ogni file ma ha unzip '*.zip'fatto il lavoro.
Ivan

27

I tuoi comandi non funzionano perché inseriscono tutti i file nella stessa riga di comando. Mentre funziona con la maggior parte dei programmi, unzipprenderà il primo argomento come file zip e qualsiasi dopo il primo come file da estrarre da esso. È necessario eseguire il comando una volta per ogni file:

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

O

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

Il secondo sembra essere migliore nel caso in cui ci siano davvero molti file. (Altrimenti si lamentava che il comando fosse troppo lungo con xargs)
Recct

5

In bash potresti anche fare quanto segue:

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

Inoltre, unzippuoi prendere l' -dinterruttore in modo da poter indirizzare l'output in posizioni diverse.

Per esempio:

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

1

Esiste una soluzione molto più semplice di quelle in loop fornite sopra, usa il -dflag directory :

unzip -o somefiles.zip -d $directoryPath

-dspecifica la directory in cui estrarre, non la directory in cui cercare i file.
LegendaryDude
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.