2012-12-19 44 views
2

我想在一個目錄下運行命令遞歸地打印出所有文件在該目錄中,然後grep所有文件那些被發現的文件名,基本檢查,看看X文件用於目錄中的任何PHPHTML文件。如果發現X文件不在任何文件中,請打印它的名稱。找到所有文件,然後用grep的所有文件的名稱

我有這到目前爲止,我無法弄清楚如何傳遞給grep我已經然後打印那些沒有結果。

find . -path ./images -prune -o -name '*' -type f -print | sed 's!.*/!!' 

我可以用exec像這樣:

find . -path ./images -prune -o -name '*' -type f -exec grep -R '{}' ./* \; 

但我不能sed遠離在找到的文件名前面的./dir/etc/給我。

令我困惑的查詢的其他部分是我無法弄清楚如何得到grep或找到打印那些沒有在grep結果。

+0

什麼搜索目標是您的執行示例中的grep? – shellter

+0

嘗試使用'find ... | xargs grep -R' –

回答

3

我覺得這樣的事情可能會有所幫助:

$ find . -type f -printf "%f\n" | grep --color -R -f - . 

在這個例子中,-printf "%f\n"導致find到不帶路徑只返回文件名。結果是一個用作grep搜索模式的文件,並且使用-f -作爲輸入在stdin上傳遞。 -R告訴grep遞歸搜索(你已經知道了)。 --color使事情看起來不錯。

要僅列出匹配的文件名,請使用grep -l -R -f - .。然後要找到沒有結果的文件,則必須找到不在該列表中的文件。

This post可能會幫助你。

1

使用-exec調用basename和管grep

find ./images -maxdepth 1 -type f -exec basename {} \; | grep ... 

這將打印所有在./images找到的文件只是文件名。

相關問題