2013-12-16 6 views
21

Ist es möglich, mehrere Verzeichnisse in Ack zu ignorieren, ohne das Flag zu wiederholen?Ack - Ignorieren mehrerer Verzeichnisse ohne das Flag zu wiederholen

z.B. Ich weiß, dass die folgenden Werke (dh mehrere Flags gesetzt wird):

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

Ich hatte gehofft, dass ich Verzeichnisse mit Komma trennen konnte, wie ich mit den Erweiterungen tun können, wie folgt:

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

jedoch trennte sich das folgende Komma ignorieren Flag nicht funktioniert:

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

Ist es möglich, eine Kurz Hand äquivalent zu verwenden, so dass ich hav nicht e um das Flag --ignore-dir wiederholt zu tippen?

Antwort

0

Ein Ansatz könnte sein, diejenigen Verzeichnisse auszuwählen, die mit einem regulären Ausdruck in -G Option ausgeschlossen werden, ergänzt durch die Option --invert-file-match. Basierend auf Ihre Frage, etwa wie folgt:

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

Interessant, zu ignorieren, aber ich glaube nicht, das in Ack 2. ich folgende Meldung lebensfähig ist erhalten: 'Option '-a' ist nicht gültig in ack 2 Dies ist, weil wir jetzt -k/- bekannte Typen haben, die es nur Dateien bekannter Typen anstelle von jeder Textdatei (das ist das Verhalten von ack 1.x). Möglicherweise verfügen Sie über Optionen in einer .ackrc-Umgebung oder in der Umgebungsvariablen ACKRC_OPTIONS. Versuchen Sie es mit dem Flag --dump' – SparrwHawk

+0

@ Birei Lösung funktioniert nur auf ack 1.x. Die Flags -a und -G wurden in ack 2 zugunsten des -x-Flags entfernt. –

12

Da Sie ack 2 unter Verwendung sind, werden Sie --ignore-dir=install und --ignore-dir=php in einer .ackrc Datei im Root Ihres Projekts setzen können. Dann wird jeder Ack-Aufruf in diesem Baum diese Flags verwenden.

31

Es ist eigentlich ähnlich, wie Sie das Include-Muster für grep angeben würden:

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

Allerdings ist dieses Format nicht mit einem einzigen Verzeichnis arbeiten. So

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

wird nicht funktionieren.

+8

Beachten Sie, dass die Syntax {} eine Bash-Erweiterung verursacht - sie ist nicht spezifisch für ack. Probieren Sie dies an Ihrer Befehlszeile: 'Echo das ist cool {1,2} ' – AgentLiquid

+0

@AgentLiquid Ich wusste das nicht. Vielen Dank! :) –

+4

Es ist auch wichtig, darauf hinzuweisen, dass, weil geschweifte Erweiterung eine Bash-spezifische Funktion ist, Sie nicht in der Lage sein werden, es in Ihrer '.ackrc' Datei zu nutzen. Stattdessen müssen Sie jede Option --ignore-dir = 'einzeln auflisten. – wpcarro

5

So einziges Verzeichnis

ack <term> --ignore-dir=dir_a 

und ignorieren mehr Verzeichnisse verwenden

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