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

28

J'ai plusieurs fichiers zip a.zip, b.zip, c.zip, ... et je souhaite les extraire 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 un find car j'ai en fait de nombreux dossiers 2014, 2013, 2012, ... , chacun d'entre eux contenant de nombreux fichiers zip. a.zip, b.zip, , etc. Si je fais find . -name "*.zip" -exec {} unzip \; , tous les fichiers seront décompressés et placés dans leur dossier parent respectif.

    
posée Michael 31.08.2014 - 15:00
la source

4 réponses

55

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

et ainsi de suite. 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 $'
unzip -d a a.zip
unzip -d b b.zip
' f; do unzip -d "${f%.*}" "$f" done < <(find -name '*.zip' -print0)
    
réponse donnée steeldriver 31.08.2014 - 15:31
la source
7

Je suis venu le chercher moi-même, mais je me suis rendu compte 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
    
réponse donnée kencinder 07.10.2017 - 19:28
la source
5

Utilisez simplement

unzip '*.zip' -d /home/user/folder/
    
réponse donnée James Muller 26.11.2015 - 04:37
la source
0

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!

    
réponse donnée Atul Singh Arora 13.02.2018 - 11:33
la source

Lire d'autres questions sur les étiquettes