如何使用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
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 14
当您不将文件名传递给 ack 时,它将对排除无法识别的二进制文件的内置默认文件集进行操作。如果您确实传递了文件名,它会在您传递的所有文件中进行搜索。这解释了ack foo
和之间的区别ack foo **
。
在 ack 1.x 中,使用标志-a
告诉 ack 不要跳过它无法识别的类型的文件。
如果您经常需要该标志,您可以创建别名:alias ack='ack -a'
在您的~/.bashrc
或 中添加该行~/.zshrc
。如果您设置了这个别名并且想在ack
没有选项的情况下调用,请调用\ack
(反斜杠禁用别名扩展)。脚本不受别名影响,仅受交互式 shell 影响。
或者,您可以将该-a
选项添加到您的~/.ackrc
.
二进制文件中的匹配项将列为“二进制文件 test1 匹配项”。如果不修改 Ack 本身(至少添加一个插件),则无法禁用此行为。
在 ack 2.0 中,该-a
选项已被删除。您可以做的是定义一个匹配所有文件的类型,并使用-k
选项使 ack 包含该类型的所有文件。请注意,文件类型以不可预测的顺序处理,这将导致一组随机的二进制类型被处理为普通类型而不是通常类型。
ack --type-set='all:match:.*' -k foo
Run Code Online (Sandbox Code Playgroud)
这样,即使对于看起来是二进制的文件,也会打印匹配项。如上所述,您可以将这些选项添加到别名或您的.ackrc
.
小智 6
默认情况下,Ack 在当前目录下的所有非二进制文件中搜索模式。
我相信旧的 Ack 版本会在您将--binary
标志传递给二进制文件时搜索二进制文件。不过这个标志已经被移除了。您或许可以改用 grep。
grep -ar 'foo' .
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5445 次 |
最近记录: |