Décompression d'un lot de fichiers

33

Quand j'essaye

 unzip filename.zip

Ça marche. Cependant, je dois décompresser une série de fichiers zip.

Pourquoi sont:

 find . -name "*.zip" -print0 | xargs -0 unzip

ou

 ls *.zip | xargs unzip

ne fonctionne pas?

Dans les deux cas, le message "attention: nom du fichier ne correspondant pas:" s'affiche.

jeannoburto
la source

Réponses:

48

Vous pouvez lancer la commande:

$ unzip '*.zip'

Regardez ici pour référence .

vfbsilva
la source
Je ne l'ai pas dit clairement, mais ils ne sont pas tous dans le même répertoire. Donc, j'ai besoin de la sortie de find.
jeannoburto
4
Merci. Cela pourrait parfaitement correspondre à la question, mais cela a résolu mon problème. J'essayais unzip *et il revenait caution: filename not matchedpour chaque fichier mais unzip '*.zip'faisait le travail.
Ivan
27

Vos commandes ne fonctionnent pas car elles placent tous les fichiers sur la même ligne de commande. Bien que cela fonctionne avec la plupart des programmes, unziple premier argument sera considéré comme un fichier zip, et tous les suivants, en tant que fichiers, à extraire. Vous devez exécuter la commande une fois pour chaque fichier:

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

Ou

find . -name '*.zip' -exec unzip {} \;
Kevin
la source
La seconde semble être meilleure au cas où il y aurait vraiment beaucoup de fichiers. (Sinon, il s'est plaint que la commande est trop longue avec xargs)
Recct
5

En bash, vous pouvez aussi faire ce qui suit:

for i in *.zip; do
    unzip "$i"
done

unzipPeut également prendre le -dcommutateur afin que vous puissiez cibler la sortie à différents endroits.

Par exemple:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done
slm
la source
1

Il existe une solution beaucoup plus simple que les solutions en boucle indiquées ci-dessus, utilisez l' -dindicateur de répertoire :

unzip -o somefiles.zip -d $directoryPath
Aditya Mittal
la source
-dspécifie le répertoire dans lequel extraire, pas le répertoire dans lequel rechercher les fichiers.
LegendaryDude