2012-06-12 49 views
0

我在名爲TestJ的目錄內。在這個目錄中,我有很多文件夾,比如MSC1,MSC2 ... MSC19,HLR1,HLR2 ..,SGSN1,SGSN2 ..。這些目錄裏面都有一個腳本ALARMS.sh。我想要做的是循環所有這些文件夾並在每個文件夾中執行ALARMS.sh。我現在的代碼是用這個循環通過目錄中的文件夾而不列出

ls -d SGSN* > temp.txt 
while read sgsn_line;do 
    echo $sgsn_line 
    cd $sgsn_line 
    ALARMS.sh 
    cd .. 
done < temp.txt 

ls -d HLR* > temp.txt 
while read hlr_line;do 
    echo $hlr_line 
    cd $hlr_line 
    ALARMS.sh 
    cd .. 
done < temp.txt 

ls -d MSC* > temp.txt 
while read msc_line;do 
    echo $msc_line 
    cd $msc_line 
    ALARMS.sh 
    cd .. 
done < temp.txt 
rm temp.txt 

但我想做同樣的工作,沒有列出任何文件中的文件夾。例如,我們可以使用for file in *.txt來循環訪問給定文件夾中的文件。我想能夠做到相同的文件夾(只有文件夾)。

+1

怎麼樣'對於MSC F */SGSN */HLR * /;做回聲「$ f」;完成'? –

+0

是的,這是我知道的作品。但事情是我不能保留任何文件的名稱以MSC *結束,否則即使那些將包括Banthar。 – user1356163

+0

什麼是斜線? – user1356163

回答

1

使用如下...

for sgsn_line in `ls -ltr SGSN* | grep ^d | awk '{print $NF}'`;do 
    echo $sgsn_line 
    cd $sgsn_line 
    ALARMS.sh 
    cd .. 
done 

.... 
+1

這也將工作。班塔爾沒有回答他更聰明,但答案很好。謝謝。 – user1356163

+0

做'cd ..'非常脆弱。更好的方法是僅在子shell中cd,並讓子shell退出,將主腳本留在它開始的目錄中。 (cd $ sgsn_line && ./ALARMS.sh); done' –

0

如果你的的find版本支持-execdir選項,最容易做的事情是:

find . -name ALARMS.sh -type f -execdir {} \; 
相關問題