Ack - Ignorieren mehrerer Verzeichnisse, ohne das Flag zu wiederholen

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

z.B. Ich kenne die folgenden funktioniert (d. H. Mehrere Flags setzen):

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

Ich hatte gehofft, dass ich Verzeichnisse mit Kommas trennen könnte, wie ich mit den Erweiterungen wie folgt machen kann:

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

Das folgende durch Kommas getrennte Ignorierungsflag funktioniert jedoch nicht:

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

Ist es möglich, ein Kurzhand-Äquivalent zu verwenden, damit ich nicht wiederholt die --ignore-dir -Flag eintippen muss?

0

4 Antworten

Da Sie ack 2 verwenden, können Sie - ignore-dir = install und - ignore-dir = PHP in eine .ackrc-Datei im Stammverzeichnis von Projekt. Dann wird jeder Ack-Aufruf in diesem Baum diese Flags verwenden.

0
hinzugefügt

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

ack -a -G 'install|php' --invert-file-match 'textstring' .
0
hinzugefügt
Interessant, aber ich denke nicht, dass dies in Ack 2 praktikabel ist. Ich bekomme die folgende Nachricht: Option '-a' ist in ack 2 nicht gültig Das liegt daran, dass wir jetzt -k/- bekannte Typen haben, die macht es nur Dateien von bekannten Typen auswählen, anstatt jede Textdatei (das ist das Verhalten von ack 1.x). Möglicherweise verfügen Sie über Optionen in einer .ackrc- oder der Umgebungsvariablen ACKRC_OPTIONS. Versuchen Sie es mit dem Flag --dump
hinzugefügt der Autor SparrwHawk, Quelle
@ Birei's Lösung funktioniert nur bei ack 1.x. Die Flags -a und -G wurden in ack 2 zugunsten des -x-Flags entfernt.
hinzugefügt der Autor Andy Lester, Quelle

Es ist tatsächlich ähnlich wie Sie die Include-Muster für grep angeben würden:

ack --ignore-dir={dir_a,dir_b}

Dieses Format funktioniert jedoch nicht mit einem einzelnen Verzeichnis. Damit

ack --ignore-dir={log}

wird nicht funktionieren.

0
hinzugefügt
@AgentLiquid Das wusste ich nicht. Vielen Dank! :)
hinzugefügt der Autor Mandar Pathak, Quelle
Es ist auch wichtig darauf hinzuweisen, dass die geschweifte Erweiterung eine Bash-spezifische Funktion ist, die Sie in Ihrer .ackrc -Datei nicht nutzen können. Stattdessen müssen Sie jede - ignore-dir = -Option einzeln auflisten.
hinzugefügt der Autor wpcarro, Quelle
Beachten Sie, dass die Syntax {} eine Bash-Erweiterung verursacht - sie ist nicht spezifisch für ack. Probieren Sie dies in Ihrer Befehlszeile aus: echo das ist cool {1,2}
hinzugefügt der Autor AgentLiquid, Quelle

So ignorieren Sie die Verwendung einzelner Verzeichnisse

ack  --ignore-dir=dir_a

und um mehrere Verzeichnisse zu ignorieren

ack  --ignore-dir={dir_a,dir_b}
0
hinzugefügt