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

37

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

En fait, ce que je veux, c’est une solution que je pourrai utiliser plus tard avec a findcar j’ai en fait beaucoup de dossiers 2014, 2013, 2012, ... chacun contenant de nombreux fichiers zip a.zip, b.zip, etc. Si je le fais find . -name "*.zip" -exec {} unzip \;il décompressera tous les fichiers et les placera dans leur dossier parent respectif.

Michael
la source

Réponses:

72

Vous devriez pouvoir utiliser l' -doption de décompression 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 findexpression, vous devriez pouvoir dériver le nom du répertoire à partir du nom du fichier zip en utilisant le développement des paramètres du shell, par exemple:

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

Testez-le d'abord en ajoutant un echoie

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)
Steeldriver
la source
2
+1 pour la test it first…partie
mrzmyr
2
finda besoin d'un répertoire, doncfind . -name ...
slf
@slf POSIXly, oui - mais pas dans le cas de GNU find( "Si aucun point de départ n'est spécifié, .c'est supposé." )
steeldriver
10

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
kencinder
la source
C'est de loin la meilleure réponse à la question qui se pose. Le précédent est ridicule et celui qui suit ne fait pas le tri dans les dossiers respectifs des fichiers.
Megolith
Comment peut -on aller sur la création du répertoire sans le .zipsuffixe? Demander un ami.
Dashard
La réponse ne crée pas un répertoire avec un suffixe .zip, c'est le point même de la partie entre accolades.
kencinder
6

Simplement utiliser

unzip '*.zip' -d /home/user/folder/
James Muller
la source
11
À moins que quelque chose me manque, tout sera décompressé dans / home / utilisateur / dossier, pas dans / home / utilisateur / dossier / a et / home / utilisateur / dossier / b
M. Justin
1

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!

Atul Singh Arora
la source