Risposte:
Se vuoi davvero decomprimerli in parallelo, potresti farlo
for i in *zip; do unzip "$i" & done
Ciò, tuttavia, avvierà N processi per file N .zip e potrebbe essere molto pesante per il tuo sistema. Per un approccio più controllato, lanciando solo 10 processi paralleli alla volta, prova questo:
find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
Per controllare il numero di processi paralleli avviati, -Ppassa a quello che desideri. Se non si desidera ricorrere in sottodirectory, fare invece questo:
find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}
In alternativa, è possibile installare GNU parallelo come suggerito da @OleTange nei commenti ed eseguire
parallel unzip ::: *zip
-execo -execdiranziché eseguire il piping a xargs. Non solo è più semplice da capire, ma è anche meno soggetto a errori e utilizza meno risorse di sistema. find . -name '*.zip' -exec unzip {} ';'(Devi citare il punto e virgola.)
-exec \;(puoi sfuggire al punto e virgola, senza bisogno di virgolette), eseguirà ogni comando in sequenza. -exec +è meglio ma non funzionerà qui poiché non è così che unzipfunziona.
Il comando parallelo GNU si adatta perfettamente a questo tipo di cose. Dopo:
$ sudo apt-get install parallel
Poi
ls *.zip | parallel unzip
Questo utilizzerà tutti i core che hai, mantenendo ogni core occupato con una decompressione, fino a quando non sono stati completati.
echo *.zipinvece per impedire a un possibile alias di intrufolarsi in ulteriori informazioni. Tuttavia, questo ha lo stesso problema della risposta di @ Guru, si interrompe sui nomi dei file contenenti spazi bianchi.
xargsGNU Parallel non si interrompe sui nomi dei file contenenti spazio / tab / quote. Solo se i nomi dei file contengono newline dovrai prestare particolare attenzione. Ad esempio utilizzando:parallel unzip ::: *.zip
echoè male come usare ls. Globbing e un ciclo while è il più sicuro.
Se hai molti .zipfile nella tua cartella e vuoi decomprimerli tutti, apri il terminale e vai alla tua cartella usando:
cd <path_to_folder>
Ora usa questo comando per decomprimere tutto il tuo .zipfile:
ls *.zip | xargs -n1 unzip
echo *.zipinvece per impedire a un possibile lsalias di intrufolarsi in ulteriori informazioni, tuttavia ciò non risolve ancora il problema degli spazi bianchi.
lsfor script, poiché l'output non è ben definito tra le versioni. Guarda invece la risposta di @terdon in quanto risolve tutti i problemi di questa soluzione.
Puoi usare find con in questo -execmodo,
find . -name "*.zip" -exec unzip {} \;
Questo sarà funziona se il file ha uno spazio nel nome.
unzip \*.zip o unzip '*.zip'
L'ovvio unzip *.zipnon funziona, perché la shell lo espande unzip foo.zip bar.zip ...e unzipinterpreta il primo nome file come file zip e i seguenti nomi file come file da estrarre da quel file zip.
Tuttavia, unzipè un po 'insolito tra i comandi Unix in quanto esegue le proprie espansioni glob. Se il *non è espanso dalla shell, decomprimerlo lo farà e interpreterà tutti i nomi di file risultanti come file zip da elaborare. Quindi, in questo caso speciale, si può scappare senza un forciclo o xargssimili.