从我能读到的一切
ack-grep foo
应该在当前目录和子目录中的所有文件中搜索术语“foo”。
然而,我能得到的最接近的是
ack-grep foo *
返回当前目录中包含“foo”的所有结果。
为什么第一个命令不起作用?我用的是ack
1.92版本。
答案1
这取决于实际的内容foo
,或者你是否ack-grep
告诉认出它作为一个type
# using ack-grep Version 1.92
mkdir junk; cd junk
echo 'hello' > wango
ack-grep hello # nothing found, because 'wango' is an unknown type
echo -e '#!/bin/bash\nhello' > wango
ack-grep hello # found, because '#!/bin/bash` identifies a known type
wango
2:hello
echo 'hello' > wango
ack-grep -a hello # found, because '-a' selects all files (almost all)
wango
1:hello
从man ack-grep
ack-grep 对其搜索的文件非常智能。它根据文件的扩展名以及某些情况下的文件内容来识别某些文件类型。可以使用 --type 选项进行这些选择。
如果没有文件选择,ack-grep 只会搜索它能识别的文件类型。如果你有一个名为 foo.wango 的文件,而 ack-grep 不知道 .wango 文件是什么,ack-grep 就不会搜索它。
-a 选项告诉 ack-grep 选择所有文件,无论类型如何。
即使使用 -a,某些文件也永远不会被 ack-grep 选择,其中包括:
· 备份文件:匹配#*#或者以~结尾的文件。
· 核心转储:与核心匹配的文件。\d+
但是,ack-grep 总是搜索命令行中给出的文件,无论其类型如何。此外,通过指定 -u 选项,将搜索所有文件。