4

From everything I can read

ack-grep foo

should search through all files in the current directory and subdirectories for the term "foo".

However, the closest I can get is

ack-grep foo *

Which returns all results that have "foo" in the current directory.

Why does the first command not work? I use ack version 1.92.

slhck
  • 235,242
theicfire
  • 293

1 Answers1

3

It depends on what is actually in foo, or if you have told ack-grep to recognize it as a 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

From man ack-grep

ack-grep is intelligent about the files it searches. It knows about certain file types, based on both the extension on the file and, in some cases, the contents of the file. These selections can be made with the --type option.

With no file selections, ack-grep only searches files of types that it recognizes. If you have a file called foo.wango, and ack-grep doesn't know what a .wango file is, ack-grep won't search it.

The -a option tells ack-grep to select all files, regardless of type.

Some files will never be selected by ack-grep, even with -a, including:

· Backup files: Files matching #*# or ending with ~.

· Coredumps: Files matching core.\d+

However, ack-grep always searches the files given on the command line, no matter what type. Furthermore, by specifying the -u option all files will be searched.

Peter.O
  • 3,093