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.

Réponses:


48

Vous pouvez lancer la commande:

$ unzip '*.zip'

Regardez ici pour référence .


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 {} \;

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

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

-dspécifie le répertoire dans lequel extraire, pas le répertoire dans lequel rechercher les fichiers.
LegendaryDude
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.