2010-03-29 7 views
0

Lorsqu'il n'y a pas de fichiers dans le dossier, le script ci-dessous va dans la boucle for. Je ne suis pas sûr de ce que je peux modifier pour qu'il ne rentre pas dans la boucle for. Aussi, quand il n'y a pas de fichiers dans le répertoire, l'état de sortie devrait être un succès. script wrapper vérifie l'état de sortie du script ci-dessousEn ce qui concerne UNIX Shell Script

 FILESRAW ="/exp/test1/folder" . 
for fspec in "$FILESRAW"/* ; do 
    echo "$fspec" 
    if [[ -f ${fspec} ]] ; then 
     ..... processing logic 
    else 
    ... processing logic 
    fi 
done 

Répondre

3

si vous utilisez bash,

vous pouvez définir nullglob

shopt-s nullglob

si vous avez des fichiers cachés,

shopt -s dotglob

avec ksh,

#!/bin/ksh 
set -o noglob 
for file in /path/* 
do 
    .... 
done 
+0

J'utilise korn shell. Je ne veux pas de fichiers cachés aussi. Dois-je mettre les deux lignes ci-dessus dans le début du script shell – Arav

+0

vous les définissez avant votre script – ghostdog74

+0

Merci beaucoup pour l'info – Arav

0
for fspec in `dir $FILESRAW` ; do 
+0

Merci beaucoup pour l'info – Arav

+0

@Arav S'il vous plaît upvote si vous trouvez une réponse utile. –

0

Pour quitter si $ FILESRAW est vide:

[ $(ls "$FILESRAW" | wc -l) -eq 0 ] && exit 0

Si ce test précède la boucle, il empêchera l'exécution d'atteindre la boucle si $ FILESRAW est vide.

Lorsque $ FILESRAW est vide, "$ FILESRAW"/* étend à "/ exp/test1/dossier/*", comme ghostdog74 souligne, vous pouvez modifier ce comportement en définissant nullglob avec

shopt -s nullglob 

Si vous voulez des fichiers cachés, définissez aussi dotglob:

shopt -s dotglob 

Alternativement, vous pouvez utiliser ls au lieu de globalisation. Ceci a l'avantage de travailler avec des répertoires très complets (à l'aide d'un tuyau, vous ne serez pas atteindre la limite d'argument maximum):

ls "$FILESRAW" | while read file; do 
    echo "$file" 

Cela devient messier si vous voulez que les fichiers cachés, puisque vous aurez besoin d'exclure. et .. pour émuler le comportement de globalisation:

ls -a "$FILESRAW" | egrep -v '^(\.|\.\.)$' | while read file; do 
    echo "$file" 
+0

en utilisant juste 'ls' laisserait des fichiers cachés. – ghostdog74

+0

merci, j'ai ajouté une discussion sur les fichiers cachés. –

+0

Merci beaucoup pour l'info – Arav