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
  • 223,558
  • 70
  • 607
  • 592
theicfire
  • 283
  • 2
  • 10
  • Is your `ack-grep` the same as `ack`? If so, which version? – slhck Aug 07 '12 at 21:12
  • I symlinked ack to ack-grep. The verison is 1.92 – theicfire Aug 07 '12 at 21:16
  • Do you have `ACK_OPTIONS` set or an `ackrc` file? I.e. does it work with `--noenv` set? – slhck Aug 07 '12 at 21:22
  • Nothing from `echo $ACK_OPTIONS` | `~/.ackrc` does not exit | `ack-grep --noenv stuff` does not work, while `ack-grep --noenv stuff *` does – theicfire Aug 07 '12 at 21:41
  • In general, you don't specify files on the command line with `ack`, which is what you're doing with `ack foo *`. When you specify files, then you're telling ack to not do any of its magic file selecting, which includes recursing into lower directories. – Andy Lester Aug 08 '12 at 12:22

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,023
  • 1
  • 28
  • 30
  • 1
    Awesome! Thanks; I ran into this problem because I was using ack on coffeescript and handlebars; I didn't realize these files were special. I found a quick solution: http://effectif.com/coffeescript/using-ack-with-coffeescript – theicfire Aug 07 '12 at 23:23