2010-05-09 2 views
40

Meine Ordnerstruktur wie folgt aussieht:ack: nur ein Verzeichnis ohne aber alle anderen mit dem gleichen Namen zu halten

/app 
/app/data 
... 
/app/secondary 
/app/secondary/data 

ich rekursiv /app, suchen einschließlich /app/data wollen. Ich möchte jedoch nicht nach /app/secondary/data suchen. Das, was ich bisher habe:

ack --ignore-dir=data searchtext 
ack --ignore-dir=secondary/data searchtext 

Der erste Befehl ignoriert beide Verzeichnisse und das zweite ist keiner von ihnen ignoriert. Wie soll mein Ack-Befehl aussehen?

Antwort

22

Diese Antwort ist für Versionen von Ack vor 2, siehe This answer for versions of Ack >=2.

Die erste ignoriert beide, weil sie beide "Daten" als Unterverzeichnis haben und ack sucht standardmäßig nach Unterverzeichnissen. So wird jedes Unterverzeichnis mit diesem Namen ignoriert. Leider funktioniert dein zweiter Weg auch nicht. Dies funktioniert für mich:

ack -a searchtext -G '^(?!.*secondary/data.*).*$' 

statt -a alle Dateien zu suchen, sehen ack-grep --help = Typen nur für bestimmte Dateitypen suchen, zB --type = text

+0

Dank für die Antwort. Ich bekomme das: $ ack-grep --text -G '^ (?!. * Sekundäre/Daten. *). * $' ack-grep: Kein regulärer Ausdruck gefunden. – mattalxndr

+0

Das liegt daran, dass Sie vergessen haben, ihm das Muster zu geben, nach dem Sie suchen, zB 'suchtext' – rkulla

+0

Informationen darüber, wie Sie die Option -G in eine '~/.ackrc'-Datei einfügen, finden Sie unter: http://stackoverflow.com/questions/5425363/is-it-possible-to-add-ag-option-to-ackrc –

47

Je älter Versionen von ack können nur den Ordnernamen und nicht den Ordnerpfad übernehmen.

1.93_02  Wed Oct 6 21:39:58 CDT 2010 
    [ENHANCEMENTS] 
    The --ignore-dir option now can ignore entire paths relative 
    to your current directory. Thanks to Nick Hooey. For example: 

     ack --ignore-dir=t/subsystem/test-data 

(Von betterthangrep.com/Changes)

können Sie überprüfen, welche Version Sie mit --version haben: Ab Version 1.93_02 haben sie diese Fähigkeit in der Nachspiel

ack --version 
+0

Funktioniert nicht in ack 2.0 https://github.com/petdance/ack2/issues/291 – geekQ