2010-03-30 8 views
0

Je veux récupérer le fichier à partir du répertoire INFILE qui sont commençant avec les noms de fichier préfixe « BBSCGG_ » ou « BCT_ » ou « ACL_ » ou « ASC » et faire le traitement à l'intérieur de la boucleEn ce qui concerne script shell Unix

INFILE=/ext/test/fil1/ 

for infile name in file prefix 

... if [[ -f ${fspec} ]] ; then 

      processing logic 

    else 
      processing logic 
done 

comment puis-je faire

Répondre

2
for name in "$infile"{BBSCGG_,BCT_,ACL_,ASC}* 
do 
    .... 
done 
+0

S'il n'y a pas de fichiers préfixe dans le répertoire que je veux afficher un avertissement. Comment puis-je le faire? – Arav

+0

boucle Sortira avec état d'échec si aucun fichier se trouvent dans le répertoire – Arav

+0

j'ai couru le programme que vous avez collé. Ça ne fonctionne pas. Les fichiers d'entrée sont dans le répertoire, mais pas la cueillette – Arav

1
#!/bin/ksh 

flag=0 
set -o braceexpand 
for file in {BBSCGG_,BCT_,ACL_,ASC_}* 
do 
    if [ -f "$file" ];then 
    # do your stuff if there are files 
    flag=1 
    fi 
done 
if [ "$flag" -eq 0 ];then 
    echo "warning. empty" 
fi 
+0

S'il n'y a pas de fichiers préfixe dans le répertoire que je veux afficher un avertissement. Comment puis-je le faire? pour la boucle se termine avec état d'échec si aucun fichier se trouvent dans le répertoire – Arav

+0

vous pouvez utiliser un drapeau ou vous pouvez vérifier le répertoire des fichiers d'abord. voir edit – ghostdog74

+0

J'ai exécuté le programme que vous avez collé. Ça ne fonctionne pas. Les fichiers d'entrée sont dans le répertoire mais ne sélectionnent pas. J'ai fait un fichier $ echo après l'instruction do et j'obtiens la sortie ci-dessous. Je ne sais pas pourquoi ça ne marche pas. Aussi, s'il n'y a pas de fichiers, cela va aussi dans le dossier et définir le drapeau. J'utilise ksh donc je ne peux pas faire la commande shopt que vous avez mentionnée dans un post précédent. Je ne sais pas pourquoi vous voulez faire infile cd $ avant les fichiers de vérification ./test.sh {BBSCGG_, BCT_, ACL_, ASC _} * – Arav

1

Vous pouvez jeter un oeil à la commande « trouver » trop s'il existe des sous-répertoires. Vérifiez d'abord this.

+0

Merci beaucoup pour l'info – Arav

0
ls -1 $INFILE/{BBSCGG_,BCT_,ACL_,ASC}* |while read FILE; do 
    # $FILE holds full pathname of each prefixed file. 
    # mmk go ... 
done 

Si vous souhaitez que tous les fichiers dans l'arborescence sous $INFILE puis utilisez find plutôt que ls:

find $INFILE -name BBSCGG_\* -o \ 
-name BCT_\* -o \ 
-name ACL_\* -o \ 
-name ASC\* |while read FILE; do 
    # kthx 
done 
+0

Merci beaucoup pour l'info – Arav