Décompresser plusieurs fichiers à la fois

24

J'ai plus de 200% de.zip fichiers dans un dossier. Je ne veux pas les décompresser un par un. Je veux extraire ceux qui utilisent une seule commande ou un script. Comment faire cela.

    
posée g_p 08.03.2014 - 21:02
la source

7 réponses

34

Si vous voulez vraiment les décompresser en parallèle, vous pouvez faire

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

Cela lancera cependant N processus pour les fichiers Nzip et pourrait être très lourd pour votre système. Pour une approche plus contrôlée, en ne lançant que 10 processus parallèles à la fois, essayez ceci:

find . -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}

Pour contrôler le nombre de processus parallèles lancés, remplacez -P par ce que vous voulez. Si vous ne voulez pas recurse dans des sous-répertoires, faites ceci à la place:

find . -maxdepth 1 -name '*.zip' -print0 | xargs -0 -I {} -P 10 unzip {}

Vous pouvez également installer le parallèle GNU , comme suggéré par @OleTange dans les commentaires, puis exécutez

.
parallel unzip ::: *zip
    
réponse donnée terdon 08.03.2014 - 21:36
la source
16

La commande parallèle GNU est bien adaptée à ce type de choses. Après:

$ sudo apt-get install parallel

Alors

ls *.zip | parallel unzip

Ceci utilisera autant de cœurs que vous avez, gardant chaque noyau occupé avec une décompression jusqu'à ce qu'ils soient tous terminés.

    
réponse donnée Wayne Conrad 09.03.2014 - 12:09
la source
12

Vous pouvez utiliser la commande suivante:

Commencez par changer le répertoire du terminal en un répertoire contenant des fichiers .zip:

cd /path

Ensuite, exécutez cette commande pour décompresser tous les fichiers .zip:

for z in *.zip; do unzip "$z"; done
    
réponse donnée nux 08.03.2014 - 21:09
la source
10

Si vous avez plusieurs fichiers .zip dans votre dossier et que vous souhaitez tous les décompresser, ouvrez le terminal et accédez à votre dossier à l'aide de:

cd <path_to_folder>

Maintenant, utilisez cette commande pour décompresser tout votre fichier .zip :

ls *.zip | xargs -n1 unzip
    
réponse donnée g_p 08.03.2014 - 21:06
la source
6

Vous pouvez utiliser find avec -exec comme suit,

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

Cela fonctionnera si le fichier contient un espace dans le nom.

    
réponse donnée Elliott Frisch 10.03.2014 - 03:59
la source
3

Une méthode non terminale.

Il suffit de sélectionner les fichiers zip, de cliquer avec le bouton droit de la souris sur l’un d’eux et de choisir extract here . Vous pouvez sélectionner tous ou seulement plusieurs fichiers zip à la fois.

    
réponse donnée Parto 09.03.2014 - 13:07
la source
1

unzip \*.zip ou unzip '*.zip'

L'évidente unzip *.zip ne fonctionne pas, car le shell le développe en tant que unzip foo.zip bar.zip ... et unzip interprète le premier nom de fichier en tant que fichier zip et les noms de fichiers suivants en tant que fichiers à extraire de ce fichier zip.

Cependant, unzip est un peu inhabituel parmi les commandes Unix dans la mesure où il effectue ses propres développements globaux. Si le shell ne développe pas * , unzip le fera et interprètera tous les noms de fichiers obtenus en tant que fichiers zip à traiter. Donc, dans ce cas particulier, on peut s’échapper sans une boucle for ou un xargs ou autre.

    
réponse donnée Nate Eldredge 10.03.2014 - 04:36
la source

Lire d'autres questions sur les étiquettes