1 votes

Décompressez de nombreux fichiers dans un répertoire donné

En résumé, je ne suis pas sûr de ce que je fais de mal, mais fondamentalement ce que je veux faire, c'est boucler sur tous les fichiers zip, et décompresser leur contenu pour un répertoire portant le nom du zip.

exemple:

Fichiers: a.zip, b.zip

Commande

for i in `ls *.zip`; do unzip $i -d  `echo $i | cut -f1 -d'.'` ; done

attendu:

Répertoire a avec le contenu de a.zip répertoire b avec le contenu de b.zip

Ce qui se passe:

Aucun fichier zip trouvé. unzip: impossible de trouver ou d'ouvrir a.zip, a.zip.zip ou a.zip.ZIP.

Toute idée sur ce qui pourrait éventuellement être incorrect?

1voto

Jahid Points 251

Ceci devrait fonctionner :

for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d  "$newdir"
done

1voto

Hastur Points 17791

Je suggère d'utiliser find sans parser la sortie de ls ou de find lui-même afin d'éviter certains problèmes essentiellement liés aux caractères spéciaux éventuellement présents dans le nom de fichier.

 find . -name "*.zip" -exec bash -c ' unzip "$0" -d "${0%*.zip}"  '  {} \;

-1voto

Utilisez ceci :

for i in `find | grep .zip$`;do unzip $i;done

MODIFIER

La réponse précédente est incorrecte (;

for i in `find | grep .zip$ | sed 's@.zip$@@'`;do mkdir $i;unzip $i.zip -d $i;done

Essayez celui-ci!

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X