3

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

ack-grep foo

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

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

ack-grep foo *

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

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

1 ответ1

3

Это зависит от того, что на самом деле находится в 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, будут выполняться поиск всех файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .