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.


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)

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

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/

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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.