2010-03-30 159 views
0

我想從INFILE目錄中檢索以文件名前綴「BBSCGG_」或「BCT_」或「ACL_」或「ASC」開頭的文件,並執行for循環內的處理關於Unix shell腳本

INFILE=/ext/test/fil1/ 

for infile name in file prefix 

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

      processing logic 

    else 
      processing logic 
done 

我怎麼能做到這一點

回答

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

如果在目錄中沒有前綴的文件,我想顯示一個警告。我該怎麼做?如果沒有文件在目錄中, – Arav 2010-03-30 01:59:40

+0

for循環將退出並顯示失敗狀態 – Arav 2010-03-30 02:00:13

+0

我運行了您粘貼的程序。它不工作。輸入文件在目錄中,但沒有選擇 – Arav 2010-03-30 02:17:58

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

如果目錄中沒有前綴文件,我想顯示警告。我該怎麼做?如果目錄 – Arav 2010-03-30 02:00:37

+0

中沒有文件,則for循環將退出並顯示失敗狀態,您可以使用標誌,也可以先檢查文件目錄。請參閱編輯 – ghostdog74 2010-03-30 02:06:06

+0

我運行了您粘貼的程序。它不工作。輸入文件在目錄中,但沒有選擇。 do語句後我做了一個echo $文件,我得到了下面的輸出。不知道爲什麼它不起作用。另外如果沒有文件,它也會進入文件夾並設置標誌。我正在使用ksh,所以我不能做你剛纔提到的shopt命令。我不確定爲什麼你想在檢查文件之前做cd $ infile ./test.sh {BBSCGG_,BCT_,ACL_,ASC _} * – Arav 2010-03-30 02:17:15

1

你可能想看看「查找」命令太多,如果子目錄存在。先檢查this

+0

非常感謝信息 – Arav 2010-03-30 02:01:43

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

如果你想在$INFILE的所有文件,然後使用find而不是ls

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

非常感謝您的信息 – Arav 2010-03-30 02:01:16