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?
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
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"
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