web-dev-qa-db-fra.com

Extrayez plusieurs fichiers Zip, chacun dans un nouveau dossier portant le même nom, via le terminal Ubuntu

J'ai beaucoup de fichiers Zip a.Zip, b.Zip, c.Zip, ... et je veux les extraire dans de nouveaux dossiers a, b, c, .. . respectivement, via terminal.

En fait, ce que je veux, c’est une solution que je pourrai utiliser plus tard avec un find car j’ai en fait beaucoup de dossiers 2014, 2013, 2012, ... chacun d’entre eux contenant plusieurs fichiers Zip a .Zip, b.Zip, etc. Si je le fais, find . -name "*.Zip" -exec {} unzip \;, tous les fichiers seront décompressés et placés dans leur dossier parent respectif.

36
Michael

Vous devriez pouvoir utiliser l'option -d de unzip pour définir un autre répertoire pour le contenu de l'archive.

unzip -d a a.Zip
unzip -d b b.Zip

etc. Dans une expression find, vous devriez pouvoir dériver le nom du répertoire à partir du nom du fichier zip en utilisant le développement du paramètre Shell, par exemple.

find -name '*.Zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Testez-le d'abord en ajoutant un echo i.e.

find -name '*.Zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

ou quelque chose comme

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.Zip' -print0)
69
steeldriver

Je suis venu le chercher moi-même, seulement pour réaliser que je l'avais déjà fait avec d'autres commandes et que cela pouvait être appliqué à peu près à tout, comme je le faisais déjà.

La méthode de recherche est extrêmement compliquée, sans raison.

for i in *.Zip; do unzip "$i" -d "${i%%.Zip}"; done
10
kencinder

Simplement utiliser

unzip '*.Zip' -d /home/user/folder/
6
James Muller

Je devais aussi faire cela en utilisant unrar. Ceci peut être réalisé par une modification mineure du code de kencinder.

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS: Je voulais ajouter ceci comme commentaire mais je n'ai pas assez de points de réputation!

0
Atul Singh Arora