Wyszukaj WSZYSTKIE pliki za pomocą ack

14

Jak wyszukiwać wszystkie pliki (w tym binarne) w bieżącym katalogu za pomocą ackv2?

Chcę zrobić to samo co robienie ack 'foo' **, ale tylko z flagą, więc działa, jeśli chcę przeszukać wszystkie pliki w określonym katalogu bez dołączania **.


Różnica między ack 'foo'i 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
Tyilo
źródło
Dlaczego chcesz użyć do tego Ack zamiast grep?
Andy Lester,
1
@AndyLester Pomyślałem, że ackzawsze jest to lepsze niż grep. Myliłem się :).
Tyilo

Odpowiedzi:

6

Domyślnie Ack szuka wzorca we wszystkich plikach niebinarnych poniżej bieżącego katalogu.

Wierzę, że starsze wersje Ack przeszukiwałyby pliki binarne po przekazaniu im --binaryflagi. Ta flaga została jednak usunięta. Zamiast tego możesz użyć grep.

grep -ar 'foo' .

źródło
Nie ma to nic wspólnego z dowiązaniami symbolicznymi. Ma to związek z plikami binarnymi!
Tyilo,
@Tyilo: Zmodyfikowałem swoją odpowiedź.
13

Gdy nie przekazujesz nazwy pliku do potwierdzenia, działa on na wbudowanym domyślnym zestawie plików, który wyklucza nierozpoznane pliki binarne. Jeśli podasz nazwy plików, przeszuka wszystkie przekazane pliki. To wyjaśnia różnicę między ack fooi ack foo **.

ack 1

W ack 1.x użyj flagi, -aaby powiedzieć ack, aby nie pomijał plików, których typu nie rozpoznaje.

Możesz utworzyć alias, jeśli chcesz tę flagę częściej niż nie: dodaj linię alias ack='ack -a'w swoim ~/.bashrclub ~/.zshrc. Jeśli skonfigurujesz ten alias i chcesz dzwonić ackbez opcji, zadzwoń \ack(odwrotny ukośnik wyłącza rozwijanie aliasu). Alias ​​nie ma wpływu na skrypty, tylko interaktywne powłoki.

Możesz też dodać -aopcję do swojego ~/.ackrc.

Dopasowania w plikach binarnych zostaną wyświetlone jako „Dopasowania pliku binarnego test1 dopasowania”. Nie ma sposobu, aby wyłączyć to zachowanie bez modyfikacji samego Ack (przynajmniej dodania wtyczki).

ack 2

W wersji 2.0 -aopcja została usunięta. Zamiast tego możesz zdefiniować typ pasujący do wszystkich plików i użyć -kopcji, aby potwierdzenie obejmowało wszystkie pliki tego typu. Zauważ, że typy plików są przetwarzane w nieprzewidywalnej kolejności, ponieważ spowoduje to, że losowy zestaw typów binarnych będzie przetwarzany jako zwykły zamiast zwykłego typu.

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

W ten sposób dopasowania są drukowane nawet dla plików, które inaczej wyglądałyby na binarne. Jak wyżej, możesz dodać te opcje do aliasu lub do swojego .ackrc.

Gilles „SO- przestań być zły”
źródło
1
To dość podstępne, @Gilles.
Andy Lester,
@AndyLester, dlaczego usunięto opcję -a? Zwrot „To dlatego, że” w rzeczywistości nie wyjaśnia, dlaczego nie mogę już wyszukiwać nierozpoznanych typów plików.
Yann Dìnendal
Ponieważ zachowanie-1.x w celu przeszukiwania wszystkich nierozpoznanych plików tekstowych jest teraz domyślnym ustawieniem w wersji 2.0.
Andy Lester
2
Dziwne, mam zminimalizowany plik js, którego nawet ten specjalny zestaw typów wszystkich dopasowań nie może znaleźć ...
Izkata 28.01.19
Jestem tu z tego powodu: tekst w zminimalizowanym pliku js, który nie jest analizowany przez ack. Myślałem, że odpowiedź brzmi „dodaj -a” ... Jestem zawiedziony.
Luciano Fantuzzi