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.
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)
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
Simplement utiliser
unzip '*.Zip' -d /home/user/folder/
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!