2013-05-15 47 views
1

我有一個腳本,它將需要分析的文件列表作爲參數。它可以是任意數量的文件。bash:使用一種模式立即獲取所有文件

$ ./myScript file1 file2 ... fileN 

現在,我必須在大量文件(〜30)上運行它,這些文件的路徑可以很容易地利用模式進行開發。用find我可以一個接一個地找到他們,並在他們每個人上應用腳本,但我想要的是將他們全部和一起運行腳本所有

我應該怎麼辦?

回答

4
find ... -exec ./myScript {} + 

威力結果在一個以上的呼叫myScript,如果有太多的比賽(即在命令行變得太長),但有一點你可以做,以避免在這種情況下,多次調用反正(缺少將模式本身作爲參數傳遞給myScript並在內部執行模式匹配)。

+0

謝謝。那麼,它是用「+」代替通常的反斜槓來改變這裏的區別嗎? –

+1

@RickyRobinson:正確。 '{} \;'是每場比賽一次,'{} +'是每次比賽的多次比賽。檢查「man find」;該工具具有很多**,可以提供超越簡單的模式查找和打印功能。瞭解它可以做什麼是非常值得的。 – DevSolar

2

您是否嘗試過使用$()將找到的參數列表放入數組中?

我曾經使用javac -d . $(find . -name '*.java' -a ! -name '.*')編譯目錄中的所有java文件。

+0

請注意,如果文件名中有空格,則失敗。 (你不應該,但它會發生。) – DevSolar

+0

這需要多次執行,雖然正確嗎? – AndrewD

+0

錯......對不起?什麼需要多次執行? (我沒有明白你的意思。) – DevSolar