Schließen Sie versteckte Unterverzeichnisse von grep -r aus

22

Ich habe eine lokale SVN-Kopie, ich möchte eine Suche auf der Zeichenfolge some_string machen.

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

Wenn Sie jedoch etwas weiter gehen, scheinen versteckte Verzeichnisse der ersten Ebene ausgeschlossen zu sein:

$ cd lang && grep some_string * -r
en:some_string=Some string

Wie kann ich die versteckten SVN-Verzeichnisse aus meiner Ausgabe entfernen und nicht nur aus der ersten Tiefenebene?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string
MUY Belgien
quelle
Keine direkte Antwort, aber vielleicht möchten Sie es mit ack versuchen .
Depquid

Antworten:

21

Verwenden Sie --exclude-dirOption, zum Beispiel:

grep -r --exclude-dir='.*' some_string

Von man grep:

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

Beachten Sie jedoch, dass diese --exclude-dirOption nur in GNU grep verfügbar ist. Wenn es von Ihnen grepnicht unterstützt wird, müssen Sie möglicherweise ein anderes Tool verwenden, z. B . :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;
jimmij
quelle
Ich muss ein zu altes Linux haben ...
MUY Belgien
Ich habe die Antwort bearbeitet, probiere die findVersion aus, wenn dein grep nicht unterstützt --exclude-dir.
Jimmy
Ich habe die Version grep, Version 2.5.1, und es gibt kein --exclude-dir-Argument, und ich habe alles ausprobiert, woran ich dachte ...
MUY, Belgien,
1
Die zweite Lösung funktioniert nicht --exclude-dir, haben Sie es versucht?
Jimmy
Ich habe "unreconized Option"
MUY Belgien
1

Normalerweise benutze ich folgendes:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}Entfernt das erste ./und dann grepalles, was mit einem Punkt beginnt.

Manuel
quelle
Code sagt e#, Text sagte%
Stephen Rauch