2011-04-18 37 views
3

有關使用xargs執行grep的快速問題。當我這樣做,我將與來自不存在與那些成功符合搜索條件的文件穿插文件,比如一堆結果顯示:xargs grep忽略不符合查詢的文件

find . | xargs grep 'Cache' 

grep: PT: No such file or directory 
grep: Sans: No such file or directory 
grep: Free: No such file or directory 
grep: Font: No such file or directory 
grep: License.txt: No such file or directory 

是否有可以傳遞一個ARG即會只顯示點擊?

謝謝。

回答

7

文件名含有空格,所以你需要告訴find輸出結果通過NUL分隔字節,而不是換行符 - 儘量不要使用以下:

find . -print0 | xargs -0 egrep 'Cache' 

-0xargs說解釋從標準輸入數據因爲 由NUL字節分隔。 (約Cache單引號內是不必要在這裏。)

在類Unix系統中的許多工具,同樣有因爲0x000x2F(正斜槓)生產或消費由NUL字節分開 數據,選項 是僅有的兩個文件或目錄中不允許使用的字節 名稱 - 這是安全處理空間爲 或換行符的文件名的常用方式。

最後一點,是非常挑剔的,你可能要改變,要:

xargs -0 egrep Cache /dev/null 

...讓你確信總會有一個以上的參數,以grep和你獲得始終以文件名爲前綴的輸出。

+0

大,爲感謝說明! – MeanwhileInHell 2011-04-18 08:39:06

1

如果你有GNU grep,只是使它遞歸

grep -R "Cache" * 
0
find . | xargs grep 'Cache' 2>/dev/null