Почему ack не выполняет рекурсивный поиск по всем файлам по умолчанию?

2142
theicfire

Из всего, что я могу прочитать

ack-grep foo 

должен искать во всех файлах в текущем каталоге и подкаталогах термин «foo».

Однако самое близкое, что я могу получить, это

ack-grep foo * 

Который возвращает все результаты, которые имеют «foo» в текущем каталоге.

Почему первая команда не работает? Я использую ackверсию 1.92.

3
Ваш `ack-grep` такой же, как` ack`? Если да, то какая версия? slhck 11 лет назад 0
Я связал ack с ack-grep. Версия 1.92 theicfire 11 лет назад 0
У вас есть набор `ACK_OPTIONS` или файл` ackrc`? Т.е. это работает с `--noenv`? slhck 11 лет назад 0
Ничего из `echo $ ACK_OPTIONS` | `~ / .ackrc` не выходит | `ack-grep --noenv stuff` не работает, в то время как` ack-grep --noenv stuff * `работает theicfire 11 лет назад 0
В общем, вы не указываете файлы в командной строке с помощью `ack`, что вы и делаете с помощью` ack foo * `. Когда вы указываете файлы, вы говорите ack, чтобы они не делали никакого выбора волшебного файла, который включает повторение в более низкие каталоги. Andy Lester 11 лет назад 0

1 ответ на вопрос

3
Peter.O

Это зависит от того, что на самом деле в foo, или, если вы сказали, ack-grepчтобы признать его в качестве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 

От man ack-grep

ack-grep хорошо разбирается в файлах, которые ищет. Он знает об определенных типах файлов, основываясь как на расширении файла, так и в некоторых случаях на содержимом файла. Эти выборы могут быть сделаны с опцией --type.

Без выбора файлов, ack-grep ищет только файлы тех типов, которые он распознает. Если у вас есть файл с именем foo.wango, и ack-grep не знает, что такое файл .wango, ack-grep не будет его искать.

Опция -a указывает ack-grep выбирать все файлы независимо от их типа.

Некоторые файлы никогда не будут выбраны ack-grep, даже с -a, включая:

· Резервное копирование файлов: файлы, соответствующие # * # или оканчивающиеся на ~.

· Coredumps: файлы, соответствующие ядру. \ D +

Однако ack-grep всегда ищет файлы, указанные в командной строке, независимо от типа. Кроме того, указав опцию -u, будут выполняться поиск всех файлов.

Потрясающие! Спасибо; Я столкнулся с этой проблемой, потому что я использовал ack на coffeescript и руле; Я не знал, что эти файлы были особенными. Я нашел быстрое решение: http://effectif.com/coffeescript/using-ack-with-coffeescript theicfire 11 лет назад 1