Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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.

share|improve this question
    
Is your ack-grep the same as ack? If so, which version? –  slhck Aug 7 '12 at 21:12
    
I symlinked ack to ack-grep. The verison is 1.92 –  theicfire Aug 7 '12 at 21:16
    
Do you have ACK_OPTIONS set or an ackrc file? I.e. does it work with --noenv set? –  slhck Aug 7 '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 7 '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 8 '12 at 12:22
add comment

1 Answer 1

up vote 2 down vote accepted

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.

share|improve this answer
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: effectif.com/coffeescript/using-ack-with-coffeescript –  theicfire Aug 7 '12 at 23:23
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.