Cerca TUTTI i file con ack


14

Come posso cercare tutti i file (incluso binario) nella directory corrente con ackv2?

Voglio fare lo stesso come fare ack 'foo' **, ma solo con un flag, quindi funziona se voglio cercare tutti i file in una directory specifica senza aggiungere **.


Differenza tra ack 'foo'e 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

Perché vuoi usare ack per questo invece di grep?
Andy Lester,

1
@AndyLester Ho solo pensato che ackfosse sempre meglio di grep. Mi sbagliavo :).
Tyilo,

Risposte:


6

Per impostazione predefinita, Ack cerca un modello in tutti i file non binari sotto la directory corrente.

Credo che le versioni precedenti di Ack avrebbero cercato tra i file binari quando gli hai passato la --binarybandiera. Questo flag è stato rimosso però. Invece potresti essere in grado di usare grep.

grep -ar 'foo' .

Non ha nulla a che fare con i collegamenti simbolici. Ha a che fare con i file binari!
Tyilo,

@Tyilo: ho modificato la mia risposta.

13

Quando non si passa alcun nome di file ack, funziona su un set predefinito di file che esclude i file binari non riconosciuti. Se passi nomi di file, cerca in tutti i file che passi. Questo spiega la differenza tra ack fooe ack foo **.

ack 1

In ack 1.x, utilizzare il flag -aper indicare a ack di non saltare i file di cui non riconosce il tipo.

Puoi creare un alias se vuoi quella bandiera più spesso: aggiungi la linea alias ack='ack -a'nel tuo ~/.bashrco ~/.zshrc. Se si imposta questo alias e si desidera chiamare acksenza l'opzione, call \ack(la barra rovesciata disabilita l'espansione dell'alias). Gli script non sono influenzati dall'alias, ma solo shell interattive.

In alternativa, puoi aggiungere l' -aopzione al tuo ~/.ackrc.

Le corrispondenze nei file binari verranno elencate come "Corrispondenze test1 dei file binari". Non è possibile disabilitare questo comportamento senza modificare Ack stesso (almeno aggiungendo un plug-in).

ack 2

In ack 2.0, l' -aopzione è stata rimossa. Quello che puoi fare invece è definire un tipo che corrisponda a tutti i file e utilizzare l' -kopzione per includere tutti i file di quel tipo. Si noti che i tipi di file vengono elaborati in un ordine imprevedibile, in questo modo un insieme casuale di tipi binari verrà elaborato come normale anziché come al solito.

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

In questo modo le corrispondenze vengono stampate anche per file che altrimenti apparirebbero binari. Come sopra, puoi aggiungere queste opzioni a un alias o al tuo .ackrc.


1
È abbastanza subdolo, @Gilles.
Andy Lester,

@AndyLester, perché l'opzione -a è stata rimossa? Il "Questo è perché" nel ritorno in realtà non spiega perché non riesco più a cercare tipi di file non riconosciuti.
Yann Dìnendal,

Perché il comportamento di 1.x -a, per cercare tutti i file di testo non riconosciuti, è ora l'impostazione predefinita in 2.0.
Andy Lester,

2
Strano, ho un file js minimizzato che nemmeno quello speciale set di tipi di tutti i tipi riesce a trovare ...
Izkata,

Sono qui per questo: un testo all'interno di un file js minimizzato, che non è analizzato da ack. Ho pensato che la risposta sarebbe stata "aggiungi -a" ... Sono deluso.
Luciano Fantuzzi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.