2009-12-17 53 views
0

我已经写过(试过)这个小bash脚本来搜索各种目录。通过一系列目录搜索bash脚本

#!/bin/bash 
shopt -s nullglob 
for file in [ac]*/blarg 
do 
    echo $file 
    done 

该脚本通过以“a”到“c”开头的目录搜索“blarg”。 它只能深入一层。我怎样才能让它遍历所有可能遇到的目录,而不仅仅是具有开始字母的目录的根目录。

此外,这个问题应该在这里去stackoverflow或超级用户会更合适?

感谢

+1

如果你实际上意味着 'a' 到 'C',你的模式必须是** [交流] **,不仅仅是** [AC ] **。 – 2009-12-17 04:48:54

+0

谢谢你,你是正确的先生。 – bing 2009-12-17 22:14:00

+0

注意:由benjamin按钮和1ch1g0给出的答案都是正确的,并做我需要的。但是因为我只能接受一个答案,所以我必须从他第一次选择benjamin按钮。 对不起1ch1g0(尽管我的确回答了你的回答) – bing 2009-12-17 22:30:11

回答

2

在命令行中的部份会尽你purpose.so为什么去一个脚本?

find ./[ac]*/ -name "blarg" 

如果你仍然需要一个脚本:

#!/bin/bash 
shopt -s nullglobi 
for file in `find ./[ac]*/ -name "blarg"` 
do 
echo $file 
done 
+0

+1比我的答案更好。 – 2009-12-17 04:11:31

+0

它应该是'./ [ac] * /'。如果文件名有空格,它也会失败。它应该是'find ... | while read file ...'或'while read file ... done <<(find ...)' – 2009-12-17 04:29:16

+0

更接近,但使用'read'仍然会失败,路径名中带有换行符。 'find [ac] */-name blarg -print0 | xargs -0 bash -c'用于“$ @”中的文件;做...; done'' – 2009-12-17 04:54:29

0
echo `find blarg` 

内容替换该行,你会发现[AC] *命名blarg下的所有文件。

3

,如果你有猛砸4.0,你可以尝试globstar