2013-12-16 12 views
21

È possibile ignorare più directory in Ack, senza ripetere la flag?Ack - Ignorare più directory senza ripetere il flag

ad es. So che i seguenti opere (vale a dire l'impostazione più flag):

ack --ignore-dir=install --ignore-dir=php 'teststring' 

speravo che avrei potuto separare le directory con le virgole, come posso fare con le estensioni come segue:

ack --ignore-file=ext:css,scss,orig 'teststring' 

Tuttavia , il seguente separati da virgola ignorare bandiera non funziona:

ack --ignore-dir=install,php 'textstring' 

E 'possibile utilizzare alcuni di breve mano equivalenti, quindi non hav e per digitare ripetutamente il flag --ignore-dir?

risposta

0

Un approccio potrebbe essere quello di selezionare quelle directory da escludere con un'espressione regolare nell'opzione -G completata con l'opzione --invert-file-match. Con sede a tua domanda, qualcosa di simile al seguente:

ack -a -G 'install|php' --invert-file-match 'textstring' . 
+0

Interessante, ma non credo che questo è fattibile in Ack 2. ricevo il seguente messaggio: L'opzione '-a' non è valida in ack 2 Questo perché ora abbiamo -k/- tipi noti che rende solo i file selezionati di tipi noti, piuttosto che qualsiasi file di testo (che è il comportamento di ack 1.x). Si possono avere opzioni in un .ackrc o nella variabile d'ambiente ACKRC_OPTIONS. Prova a usare il flag --dump – SparrwHawk

+0

@ La soluzione di Birei funziona solo su Ack 1.x. I flag -a e -G sono stati rimossi in Ack 2 a favore del flag -x. –

12

Dal momento che si sta utilizzando ack 2, si può mettere --ignore-dir=install e --ignore-dir=php in un file .ackrc nella root del vostro progetto. Quindi, ogni invocazione di ack in quell'albero utilizzerà tali flag.

31

In realtà è simile a come si dovrebbe specificare i modelli includono per grep:

ack <term> --ignore-dir={dir_a,dir_b}

Tuttavia, Questo formato non funziona con una singola directory. Così

ack <term> --ignore-dir={log}

non funzionerà.

+8

Si noti che la sintassi {} causa un'espansione di bash - non è specifica per l'ack. Prova questo alla tua riga di comando: 'echo questo è bello {1,2}' – AgentLiquid

+0

@AgentLiquid non lo sapevo. Grazie! :) –

+4

È anche importante sottolineare che, poiché l'espansione delle parentesi graffe è una caratteristica specifica di bash, non sarà possibile trarne vantaggio nel file '.ackrc'. Invece, dovrai elencare singolarmente ciascuna opzione '--ignore-dir ='. – wpcarro

5

Quindi, per ignorare utilizzare directory singola

ack <term> --ignore-dir=dir_a 

e di ignorare più directory utilizzano

ack <term> --ignore-dir={dir_a,dir_b} 
Problemi correlati