Пошук ВСІХ файлів з ack


14

Як я можу шукати всі файли (включаючи двійкові) у поточному каталозі за допомогою ackv2?

Я хочу зробити те саме, що робити ack 'foo' **, але просто з прапором, тому він працює, якщо я хочу шукати всі файли в певному каталозі без додавання **.


Різниця між ack 'foo'та ack 'foo' **:

$ mkdir test && cd test
$ printf '\x00\x01foo1\x00' > test1
$ printf 'foo2' > test2
$ ack 'foo'
test2
1:foo2
$ ack 'foo' **
test1
1:foo1

test2
1:foo2

Чому ви хочете використовувати Ack для цього замість grep?
Енді Лестер

1
@AndyLester Я просто думав, що ackце завжди краще, ніж grep. Я був неправий :).
Тиїло

Відповіді:


6

За замовчуванням Ack шукає шаблон у всіх небінарних файлах нижче поточного каталогу.

Я вважаю, що старіші версії Ack шукали бинарні файли, коли ви передавали їм --binaryпрапор. Цей прапор було видалено. Ви можете замість цього використовувати греп.

grep -ar 'foo' .

Це не має нічого спільного із символьними посиланнями. Це стосується двійкових файлів!
Тіїло

@Tyilo: Я змінив свою відповідь.

13

Якщо ви не передаєте ім'я файлу ack, він працює на вбудованому наборі файлів за замовчуванням, який виключає нерозпізнані бінарні файли. Якщо ви передаєте імена файлів, він здійснює пошук у всіх переданих вами файлах. Цим пояснюється різниця між ack fooі ack foo **.

ак 1

У додатку 1.x використовуйте прапор, -aщоб сказати аку не пропускати файли, тип яких він не розпізнає.

Ви можете зробити псевдонім, якщо бажаєте цього прапора частіше, ніж ні: додайте рядок alias ack='ack -a'у своєму ~/.bashrcабо ~/.zshrc. Якщо ви налаштували цей псевдонім і хочете зателефонувати ackбез опції, зателефонуйте \ack(зворотна косої риски відключає розширення псевдоніму). Псевдоніми не впливають на сценарії, лише на інтерактивні оболонки.

Крім того, ви можете додати -aваріант до свого ~/.ackrc.

Збіги у двійкових файлах будуть перераховані як "Бінарний тестовий файл1 відповідає". Немає можливості відключити цю поведінку без зміни самого Ack (принаймні додавання плагіна).

ак 2

У ack 2.0 -aопція була видалена. Замість цього можна визначити тип, який відповідає всім файлам, і використовувати -kопцію, щоб ack включав усі файли цього типу. Зауважте, що типи файлів обробляються в непередбачуваному порядку, це призведе до того, що випадковий набір бінарних типів обробляється як звичайний, а не як звичайний.

ack --type-set='all:match:.*' -k foo

Таким чином, сірники друкуються навіть для файлів, які інакше виглядали б бінарними. Як зазначено вище, ви можете додати ці параметри до псевдоніма або до свого .ackrc.


1
Це досить підлий, @Gilles.
Енді Лестер

@AndyLester, чому було видалено варіант -a? У відповідь "Це тому, що" насправді не пояснює, чому я більше не можу шукати нерозпізнані типи файлів.
Yann Dìnendal

Оскільки поведінка 1.x для пошуку всіх нерозпізнаних текстових файлів тепер є типовим у 2.0.
Енді Лестер

2
Дивно, у мене є мінімізований js-файл, який навіть цього спеціального набору типів усіх типів не можна знайти ...
Izkata

Я тут через це: текст у мінімізованому файлі js, який не розбирається ack. Я думав, що відповідь буде як "додати -а" ... я розчарований.
Лучано
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.