18

I have started using ack which is much faster than grep. However using ack I want to search for file name rather than file contents. Is there a way to do that?

quack quixote
  • 42,186
  • 14
  • 105
  • 129
Nadal
  • 939
  • 3
  • 8
  • 11

4 Answers4

25
ack -g REGEX

Print files where the relative path + filename matches REGEX

Danil Kutkevich
  • 351
  • 3
  • 6
17

Use the right tool for the right job. If you want to search for filename, use 'find':

$ # search for all *.txt file in current directory
$ find . -iname "*.txt"
Lie Ryan
  • 4,507
  • 3
  • 22
  • 26
  • 1
    very true. "once you hold a hammer in your hand everything starts to look like a nail" :) – akira Apr 25 '10 at 15:05
  • 2
    Well, ack (and grep) are nicer because you don't have to be explicit about regexes unless you want to. I usually just do a `find . | ack whatev.ext` – Ehtesh Choudhury May 25 '12 at 15:49
  • This works for finding directories as well. – Pratik Khadloya Jul 24 '12 at 17:03
  • 1
    find and ack behave differently since ack filters out a lot of results by default (contents of version control directories, compiled objects in a source repository) that would be included by find. The best hammer depends on the results you want. – Joshua Goldberg Jan 08 '15 at 22:05
  • Actually, it's apparently [kind of tricky](http://unix.stackexchange.com/a/84039/77539) to get ack version 2 to behave like find. – Joshua Goldberg Jan 08 '15 at 22:10
  • 1
    This is not answering the question... – lajarre Jun 26 '15 at 09:42
9

I agree it makes sense to use find if you're just searching for *.txt files. However, ack has powerful file-type detectiong features, so you can use

ack -f --perl

which will find all the Perl files, based on both the filename (*.pm, *.pl, *.t and *.pod) and the shebang line.

Andy Lester
  • 1,253
  • 6
  • 15
1

You can do :

ack -f | ack "filename.ext"
OlivierLarue
  • 246
  • 2
  • 4