web-dev-qa-db-fra.com

décompresser plusieurs fichiers à la fois

J'ai des milliers de fichiers .Zip dans un dossier, je veux extraire ceux qui utilisent une commande ou un script, chaque fichier .Zip dans son propre dossier. Je souhaite exécuter le processus de décompression plusieurs fois. Comment puis je faire ça?

2
yarone

Cela fera l'affaire, exécutez ceci sur le terminal

for f in *.Zip; do unzip $f -d ${f%.*}; done

Ok réponse redéfinie en tenant compte du commentaire:

Dans un fichier nommé unzip.sh, mettez ce code:

#!/bin/bash
LEN=${#}
COUNT=0
PROCESSES=20
ITERATE=$(( LEN/PROCESSES ))
for ((i=0;i<=ITERATE;i++))
do 
    LOWER=$(( i*PROCESSES+1 ))
    HIGHER=$(( (i+1)*PROCESSES ))
    ./aux.sh ${@:$LOWER:$HIGHER} &!
done

Dans un fichier nommé aux.sh, mettez ce code:

#!/bin/bash
for f in $@; do unzip $f -d ${f%.*}; done

N'oubliez pas de définir les deux fichiers avec des autorisations d'exécution en tapant dans le terminal: chmod +x unzip.sh aux.sh Il ne vous reste plus qu'à exécuter le script en tapant dans le terminal: ./unzip.sh *.Zip

1
Diogo Vilela

Si les fichiers contenus dans les fichiers Zip se trouvent dans leurs dossiers respectifs, une solution plus simple consisterait à saisir ceci dans le terminal ouvert du dossier des fichiers Zip:

décompressez "* .Zip"

0
Nikki Mino

xargs avec -P n peut être utilisé pour exécuter un programme en parallèle pour plusieurs fichiers. Ce qui suit, par exemple, exécute 8 instances de unzip en parallèle.

cd directory-with-Zip-files
find . -name '*.Zip' -print0 | xargs -0 -n 1 -P 8 unzip
0
Chai T. Rex