2012-07-27 90 views
4

如果我寫這個字符串在我的腳本:在bash腳本通配符擴展

list=$(ls /path/to/some/files/*/*/*.dat) 

它工作正常。但我需要的是

files="files/*/*/*.dat" 
list=$(ls /path/to/some/${files}) 

和它說

ls: /path/to/some/files/*/*/*.dat: No such file or directory 

我應該怎麼辦呢?

+1

適合我......只有在沒有.dat文件時纔會失敗。 – sashang 2012-07-27 11:51:51

+3

你要用'$ list'做什麼?解析'ls'的輸出通常不是正確的方法。 – choroba 2012-07-27 11:57:57

+0

我需要將這個列表分成幾個N文件,然後在集羣中的多臺計算機上爲每個作業啓動N個輸入文件。 – Morse 2012-07-27 12:56:11

回答

4

試試這個:

list=$(find /path/to/some/files/ -mindepth 3 -maxdepth 3 -name '*.dat') 
+3

使用find是一種很好的方法,但是這會構建一串文件名,如果它們包含空格,將會中斷。 – jordanm 2012-07-27 12:47:01

+0

我的情況沒有特殊的符號,所以這工作得很好。謝謝。 – Morse 2012-07-27 12:59:15

10

如果你只能得到消息,那裏確實是不匹配的.dat文件,添加到您的腳本:

shopt -s nullglob 

這將導致水珠擴大到一個空列表,如果沒有匹配的文件,而不是字面上的處理。