2011-02-23 32 views

回答

1

典型的機制是這樣的:

for f in glob; do command $f ; done 

我經常遇到類似的命令:for f in *; do echo -n "$f " ; cat $f ; done看到目錄中的所有文件的內容。 (特別好,與/proc/sys/kernel/式的目錄,所有的文件都具有很短的內容。)

find . -type f -exec command {} \; 

find . -type f -print0 | xargs -0 command parameters 

喜歡的東西find . -type f -exec file {} \;find . -type f -print0 | xargs -0 file(僅適用如果命令在輸入過程中接受多個文件名)。

當然,如果程序接受多個文件名參數(如catmore或類似Unix外殼工具),所有文件都在一個單獨的目錄,你可以很輕鬆地運行:在所有文件的cat *(節目內容目錄)或cat *.*(顯示文件名中帶有句點的所有文件的內容)。

如果您經常想「在所有[子] *目錄中的所有文件」,zsh的**/選項都可以得心應手:ls -l **/*.c會立即告訴你foo/bar/baz.c/blort/bleet/boop.c。整潔的工具,但我通常不介意編寫find命令的等價物,我只是不經常需要它。 (而且zsh並沒有安裝到任何地方,所以依靠它的功能可能會在將來令人沮喪。)

+0

需要注意的一些事項1)用'\;'終止'find'的-exec選項會導致它爲每個找到的輸入文件調用一次'command',即只有一個輸入。 2)符合posix標準的'find'版本可以使用'+'而不是'\;'來終止-exec,它的功能與你的'xargs'版本相同。 3)Bash 4.X引入了'shopt -s globstar' shell選項,像zsh一樣通過'**'添加遞歸通配符。 – SiegeX 2011-02-23 04:15:45

+0

hunpos tagger的問題在於它不能用作單線程#bash命令。 「./hunpos-tagger en_wsj.model」命令會爲stdio打開一個新行,但不會讀取文本文件。有沒有辦法讓它讀取我的文本文件? – alvas 2011-02-23 07:08:31

+0

@SiegeX,真棒,從不知道'find'的'+'選項,我沒有意識到新的'bash'從'zsh'中偷走了很酷的功能。當我在我的外殼中嘗試它時,它不起作用,所以我認爲他們出於某種原因不喜歡它。 :) 謝謝! – sarnold 2011-02-23 08:07:43