Почему ack не рекурсивно ищет все файлы по умолчанию?
Из всего, что я могу прочитать
ack-grep foo
должен искать во всех файлах в текущем каталоге и подкаталогах термин "foo".
Однако самое близкое, что я могу получить, это
ack-grep foo *
Который возвращает все результаты, которые имеют "foo" в текущем каталоге.
Почему первая команда не работает? я использую ack
версия 1.92.
1 ответ
Это зависит от того, что на самом деле в 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, будут выполняться поиск всех файлов.