Getting ack to search through .htaccess or other dotfiles
Is there any way to get ack to search through a file whose filename starts with a .
(e.g. .htaccess), without resorting to the --all
or --unrestricted
options?
I've tried adding the follo开发者_如何学Gowing to my ~/.ackrc
file to no avail:
--type-set=apache=.htaccess
It would appear that ack doesn't recognize a filename that's all extension; that is, when you specify an extension of ".htaccess", ack only looks for files with at least one character before that extension.
To get around this, you can use -u/--unrestricted
in combination with the -G regex
flag (to restrict the search to files whose names match a regex). For example:
$ ack -u -G '\.htaccess' pattern
Updated @Sean's answer for Ack 2
since they removed the two flags that @Sean used
ack 2 release notes say:
The -G option has been removed. Two patterns on the command line was ambiguous. In this command line:
ack1 -G filepattern -i -w searchpattern
which pattern does -i and -w modify? Now, with ack 2.0, you can use the new -x to pipe filenames from one invocation of ack into another.
ack2 -g -i filepattern | ack2 -x -w searchpattern
and the -u (unrestricted) flag is not needed any more. So what you want is:
ack -g "\.htaccess" | ack -x pattern
Or, for that matter, just use find to generate the file list (especially useful to find a file in a dotfolder):
find **/.hidden/complex-path/* | ack -x pattern
You can't do it in ack 1.x. ack 2.0 will have more flexible ways of specifying files.
精彩评论