循环遍历目录中的文件夹而不列出

时间:2012-06-12 10:01:52

标签: unix loops directory

我在名为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遍历给定文件夹中的文件。我希望能够对文件夹(仅文件夹)执行相同的操作。

2 个答案:

答案 0 :(得分: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 :(得分:0)

如果您的find版本支持-execdir选项,最简单的方法是:

find . -name ALARMS.sh -type f -execdir {} \;