ack пропускает результаты (по сравнению с grep)

Я уверен, что неправильно понимаю что-то о файле/каталоге ack, игнорируют значения по умолчанию, но возможно кто-то мог пролить некоторый свет на это для меня:

mbuck$ grep logout -R app/views/
Binary file app/views/shared/._header.html.erb.bak.swp matches
Binary file app/views/shared/._header.html.erb.swp matches
app/views/shared/_header.html.erb.bak: <%= link_to logout_text, logout_path, { :title => logout_text, :class => 'login-menuitem' } %>
mbuck$ ack logout app/views/
mbuck$

Принимая во внимание, что...

mbuck$ ack -u logout app/views/
Binary file app/views/shared/._header.html.erb.bak.swp matches
Binary file app/views/shared/._header.html.erb.swp matches
app/views/shared/_header.html.erb.bak
98:<%= link_to logout_text, logout_path, { :title => logout_text, :class => 'login-menuitem' } %>

Просто вызов ack без опций не может найти результат в a .bak файл, но звонящий с --unrestricted опция может найти результат. Насколько я могу сказать, тем не менее, ack, не игнорирует .bak файлы по умолчанию.

ОБНОВЛЕНИЕ

Благодаря полезным комментариям ниже, вот новое содержание моего ~/.ackrc:

--type-add=ruby=.haml,.rake
--type-add=css=.less
46
задан techpeace 21 June 2010 в 19:34
поделиться

3 ответа

ack отличается тем, что у него нет черного списка типов файлов, которые нужно игнорировать, а скорее белого списка типов файлов, в которых он будет искать.

Цитата из справочной страницы:

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

(Обратите внимание, что я использую Ubuntu, где двоичный файл называется ack-grep из-за конфликта имен)

ack --help-types покажет список типов, которые вы опоры для установки ack.

52
ответ дан 26 November 2019 в 20:28
поделиться

ack --man states:

Если вы хотите, чтобы ack искал каждый файл, даже те, которые он всегда игнорирует, например coredumps и файлы резервных копий, используйте "-u".

и

Почему ack по умолчанию игнорирует неизвестные файлы? по умолчанию? ack разработан программистом, для программистов, для поиска в больших деревьях кода. Большинство кодовых баз содержат много файлов которые не являются исходными файлами (например скомпилированные объектные файлы, контроль исходных текстов метаданные и т.д.), и grep тратит много времени на поиск по всем этим и возвращает совпадения из этих файлов.

Вот почему поведение ack, заключающееся в том. искать то, что он не распознает является одним из его величайших достоинств: скорость, которую вы получаете от поиска только то, что вы хотите искать.

EDIT: Также, если вы посмотрите на исходный код, bak файлы игнорируются.

12
ответ дан 26 November 2019 в 20:28
поделиться

Если вы запутались в том, какие файлы будет искать ack, просто добавьте опцию -f. Будет выведен список всех файлов, которые он считает доступными для поиска.

13
ответ дан 26 November 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: