2011-11-19 16 views
14

Fondamentalmente voglio solo fare ack foo * .citrus e avere drill down di ack e trovare la stringa 'foo' in tutti i file Citrus nella directory corrente e in basso. Il problema è che questo non funzionerà se non ci sono file di Citrus nella directory corrente.Ack: Cerca l'albero delle directory per i file con una particolare estensione

Ho provato a fare scherzi con -G senza successo. Devo davvero aggiungere un tipo di file in .ackrc solo per limitare la ricerca ai file con una determinata estensione?

risposta

11

Per impostazione predefinita, ack cerca solo nei file con tipi noti (come * .java, * .cpp ecc.). E non sa di file * .citrus, in modo da ricercare in tali file è necessario utilizzare -a cmd interruttore di linea:

$ack -a -G '\.citrus$' foo 
1.d/1.citrus 
1:foo_bar 
+1

oppure è possibile utilizzare questo suggerimento: http://stackoverflow.com/questions/ 3870611/how-to-let-ack-support-more-filetypes –

+1

Il -a è eccessivo. --type-set è la strada da percorrere. –

+1

Questo è logico, ma non utile in modo ottimale. Un compito così semplice - "cerca i file con questa estensione" - ti richiede di dire non solo l'estensione usando un'estensione regolare (-G), ma che vuoi che cerchi effettivamente quei file (-a o --type- set - anche questa scelta è controversa). Devi amare Unix. –

4

Non è necessario impostarlo in .ackrc se non si desidera. È inoltre possibile impostare ACK_OPTIONS nel proprio ambiente o specificare gli argomenti --type-set nella riga di comando. Ack non importa.

12

Come suggerito da Andy Lester, è anche possibile creare un comporre witout prendersi la briga di aggiungere nella tua .ackrc:

ack --type-set=cit=.citrus --cit "foo" 
Problemi correlati