unzip file.zip -d xxx
estrarrà i file nella directory xxx e xxx verrà creato se non è presente. Puoi controllare la pagina man per i dettagli.
La riga awk qui sotto dovrebbe fare il lavoro:
ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'|sh
Guarda il test sotto,
nota che ho rimosso |sh
alla fine, visto che le mie zip sono archivi falsi; Voglio solo mostrare qui la riga di comando generata.
kent$ ls -l
total 0
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 001.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 002.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 003.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 004.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 005.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 006.zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 007.zip
kent$ ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'
unzip 001.zip -d 001
unzip 002.zip -d 002
unzip 003.zip -d 003
unzip 004.zip -d 004
unzip 005.zip -d 005
unzip 006.zip -d 006
unzip 007.zip -d 007
"estrai qui" è semplicemente una caratteristica di qualunque unzip
involucro che stai utilizzando. unzip
estrarrà solo ciò che è effettivamente nell'archivio. Probabilmente non esiste un modo più semplice di uno script di shell. Ma sed
, awk
ecc. non sono necessari per questo se hai una shell conforme a POSIX:
for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done
(NON DEVI sfuggire al *
o l'espansione del percorso non avrà luogo.) Tieni presente che se l'archivio ZIP contiene una directory, come con gli archivi Eclipse (che contengono sempre eclipse/
), ti ritroveresti con ./eclipse*/eclipse/eclipse.ini
in ogni caso. Aggiungi echo
prima di unzip
per una corsa a secco.
p7zip
, la versione a riga di comando di 7zip fa il lavoro
7z x '*.zip' -o'*'
Su debian e ubuntu, devi installare p7zip-full
.