2016-11-02 6 views
0

Je dois écrire un script sur Bash, qui va trouver tous les fichiers zip dans les sous-dossiers, lier les fichiers et leur chemin dans un fichier, puis parcourez cette liste et effectuez certaines tâches avec tous les fichiers zip (par exemple, extraire, vérifier les fichiers dans le fichier zip, puis supprimer les fichiers extraits).Bash trouver tous les fichiers zip dans les sous-dossiers, lier les fichiers et leur chemin en boucle et effectuer certaines tâches

Quelques réflexions:

#!/bin/bash 
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
echo $DIR ##current dir 
ls $DIR\*.zip 

résultat Rabattre ensuite un fichier (par exemple) ziplist.txt ensuite lire ce fichier en boucle par chaîne:

if [[ some result ]] ; then 
while IFS= read -r ; do 

done <$DIR/ziplist.txt 

Comment cela peut se faire dans le meilleur façon? Désolé, j'ai une expérience limitée avec bash.

Répondre

0

Cela devrait faire l'affaire:

for filename in $(find . -name '*.zip'); do 
    # Your operations here 
done 

Si vous souhaitez continuer à utiliser un certain temps que vous pouvez faire:

while IFS= read -r ; do 

done < <(find . -name '*.zip') 
0

Vous pouvez utiliser find de plusieurs façons pour ce faire.

« Votre » serait de créer un fichier temporaire et boucle à travers ceci:

find /your/path -name '*.zip' > /tmp/zips 

Si vous n'avez pas nécessairement la collection de fichiers, mais simplement vouloir effectuer une tâche à eux que vous trouverez eux, vous pouvez utiliser exec trouver:

find /your/path -name '*.zip' -exec /path/to/your/worker/script.sh {} \; 

qui exécutera votre script.sh pour chaque fichier zip qu'il trouve, avec le chemin du fichier zip complet comme argument.

Espérons que cela aide.