2012-12-12 30 views
3

我試圖搜索我的整個服務器的字符串,而使用ack不包括dev /(-R)。到目前爲止,我有爲什麼我的ack --ignore-dir不工作?

sudo ack -i --ignore-dir=dev * foo 

--version ack v1.39 

但是我收到一個錯誤。我哪裏錯了?

在這個問題上的任何幫助或建議,歡迎

回答

9

首先,當你說:「我得到一個錯誤」,即變爲「我收到以下錯誤」,然後告訴我們是什麼錯誤。該錯誤對於我們能夠幫助診斷問題非常重要。

其次,您使用的ack版本非常陳舊。最新的是1.96。

第三,你有你的論點沒有秩序。你在尋找「富」,對吧?那麼你應該做「ack foo *」,而不是「ack * foo」。

您不應該爲文件名指定「*」。讓ack爲您查找文件。如果「dev」是你要呼叫的目錄中的一個目錄,那麼「ack *」將擴展爲「ack dev [other directories]」,這明確告訴ack在「dev」目錄中進行搜索,這會覆蓋--ignore-dir指令。

你應該做的是:

ack -i --ignore-dir=dev foo 

然後你讓ACK做文件發現。如果由於某種原因必須覆蓋ack正在查找的文件,則只應在命令行上指定文件名。

最後,你可能不應該首先使用ack來完成這項任務。 ack專門用於搜索源代碼,它不會搜索不考慮源代碼的文件。如果您正在搜索整個服務器,那麼您可能也想搜索非源代碼文件,對吧?爲此使用grep。

+0

感謝您的回覆。完美工作 –

+0

當你說「完美」時,你確定嗎?所有你認爲會被搜索到的文件都是ack認可的源代碼?例如,ack不搜索.cfg或.txt文件,或者沒有擴展名的文件。它*僅*搜索它識別的源代碼類型的文件。當你說「我的整個服務器」時,聽起來並不像你只想搜索源代碼。 –

+0

用例有點複雜。基本上,一箇舊的系統管理員流氓,我是一個web開發人員,通過服務器進行搜索以仔細檢查所有文件的名稱。這是爲了防止某些令人討厭的事情,我不知道已經(在userdel之後,ssh撤銷等)我以前用grep試過,但似乎它對於這項工作來說太過分了......搜索很好地運行並似乎在做這項工作。邊注。大多數項目都在Rails中。再次歡呼 –