4 votes

Extraction de plusieurs fichiers zip à partir d'une liste de textes dans leurs propres dossiers avec un journal d'erreurs.

Je souhaite décompresser des fichiers ZIP à partir d'une liste de texte, chacun dans son propre dossier et afficher les erreurs dans un fichier journal.

La liste ressemble à ceci :

0001.zip
0002.zip

Je sais que je peux utiliser la commande suivante mais je ne sais pas comment faire pour accomplir ce qui précède.

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

Merci.

7voto

muru Points 180007

Puisque vous avez déjà la commande d'extraction sh -c 'unzip -d "${1%.*}" "$1"' vous pouvez utiliser xargs pour convertir les fichiers d'entrée en arguments :

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _

El {} n'est pas nécessaire puisque xargs ajoute par défaut l'entrée à la liste des arguments. Le site -L1 lui fait utiliser une ligne d'entrée comme argument.

Ensuite, il suffit de rediriger la sortie vers un fichier :

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _ &> zip.log

Ou seulement les erreurs :

xargs -a list-of-files -L1 sh -c 'unzip -d "${1%.*}" "$1"' _ 2> zip.log

6voto

taifwa Points 768

Si nous supposons que vous avez une liste textuelle de fichiers zip comme :

zipfile1.zip
another_archive.zip
...

alors vous pouvez faire

cat ziplist.txt | while read zipfile; do
    zipdir="$(basename "$zipfile").d"

    (
        mkdir "$zipdir"
        cd "$zipdir"
        echo "Extracting $PWD/../$zipfile"
        unzip "../$zipfile" 2>&1 > "../$zipfile.log"
    )
done

Cela créera un répertoire, y défera le fichier zip et écrira tout dans un fichier journal dans le même répertoire que le fichier zip lui-même.

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