使用 ack 搜尋所有文件
如何使用v2搜尋目前目錄中的所有文件(包括二進製文件)?
ack
我想做與做相同的事情
ack 'foo' **
,但只是使用一個標誌,所以如果我想搜尋特定目錄中的所有文件而不附加**
.
ack 'foo'
和之間的區別ack 'foo' **
:$ mkdir test && cd test $ printf '\x00\x01foo1\x00' > test1 $ printf 'foo2' > test2 $ ack 'foo' test2 1:foo2 $ ack 'foo' ** test1 1:foo1 test2 1:foo2
預設情況下,Ack 在目前目錄下的所有非二進製文件中搜尋模式。
--binary
我相信當您將標誌傳遞給舊的 Ack 版本時,它們會搜尋二進製文件。雖然這個標誌已被刪除。您也許可以改用 grep。grep -ar 'foo' .
當您沒有將文件名傳遞給 ack 時,它會對內置的預設文件集進行操作,該文件集不包括無法辨識的二進製文件。如果您確實傳遞了文件名,它會搜尋您傳遞的所有文件。
ack foo
這解釋了和之間的區別ack foo **
。確認 1
在 ack 1.x 中,使用標誌
-a
告訴 ack 不要跳過它無法辨識類型的文件。如果您經常需要該標誌,您可以創建一個別名:
alias ack='ack -a'
在您的~/.bashrc
or中添加該行~/.zshrc
。如果您設置了此別名並想在ack
沒有該選項的情況下呼叫,請呼叫\ack
(反斜杠禁用別名擴展)。腳本不受別名的影響,只有互動式 shell。或者,您可以將
-a
選項添加到您的~/.ackrc
.二進製文件中的匹配項將列為“二進製文件 test1 匹配項”。如果不修改 Ack 本身(至少添加一個外掛),就無法禁用此行為。
確認 2
在 ack 2.0 中,該
-a
選項已被刪除。相反,您可以做的是定義一個匹配所有文件的類型,並使用該-k
選項使 ack 包含該類型的所有文件。請注意,文件類型以不可預測的順序處理,這將導致隨機的二進制類型集被處理為普通類型而不是通常類型。ack --type-set='all:match:.*' -k foo
這樣,即使對於原本看起來是二進制的文件,也會列印匹配項。如上所述,您可以將這些選項添加到別名或您的
.ackrc
.