2009-12-17 56 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