Ack

使用 ack 搜尋所有文件

  • July 23, 2013

如何使用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'在您的~/.bashrcor中添加該行~/.zshrc。如果您設置了此別名並想在ack沒有該選項的情況下呼叫,請呼叫\ack(反斜杠禁用別名擴展)。腳本不受別名的影響,只有互動式 shell。

或者,您可以將-a選項添加到您的~/.ackrc.

二進製文件中的匹配項將列為“二進製文件 test1 匹配項”。如果不修改 Ack 本身(至少添加一個外掛),就無法禁用此行為。

確認 2

在 ack 2.0 中,該-a選項已被刪除。相反,您可以做的是定義一個匹配所有文件的類型,並使用該-k選項使 ack 包含該類型的所有文件。請注意,文件類型以不可預測的順序處理,這將導致隨機的二進制類型集被處理為普通類型而不是通常類型。

ack --type-set='all:match:.*' -k foo

這樣,即使對於原本看起來是二進制的文件,也會列印匹配項。如上所述,您可以將這些選項添加到別名或您的.ackrc.

引用自:https://unix.stackexchange.com/questions/84002