Ich suche in einem Git-Repository und möchte den .git
Ordner einschließen .
grep
enthält diesen Ordner nicht, wenn ich laufe
grep -r search *
Was wäre ein grep-Befehl, um diesen Ordner einzuschließen?
Ich suche in einem Git-Repository und möchte den .git
Ordner einschließen .
grep
enthält diesen Ordner nicht, wenn ich laufe
grep -r search *
Was wäre ein grep-Befehl, um diesen Ordner einzuschließen?
Antworten:
Bitte beziehen Sie sich auf die Lösung am Ende dieses Beitrags als bessere Alternative zu dem, was Sie tun.
Sie können versteckte Dateien explizit einschließen (ein Verzeichnis ist auch eine Datei).
grep -r search * .*
Das *
passt zu allen Dateien außer den versteckten und .*
nur zu den versteckten Dateien. Dies schlägt jedoch fehl, wenn sich entweder keine nicht versteckten Dateien oder keine versteckten Dateien in einem bestimmten Verzeichnis befinden. Sie können natürlich explizit .git
anstelle von hinzufügen .*
.
Wenn Sie jedoch einfach in einem bestimmten Verzeichnis suchen möchten, gehen Sie folgendermaßen vor:
grep -r search .
Das entspricht .
dem aktuellen Pfad, der sowohl nicht versteckte als auch versteckte Dateien enthält.
.*
wird das übergeordnete Verzeichnis enthalten (weil ..
Übereinstimmungen)
Ich bin gerade auf dieses Problem gestoßen. Basierend auf der Antwort von @ bitmask ist hier meine einfache Änderung, um das von @sehe aufgezeigte Problem zu vermeiden:
grep -r search_string * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
Was mache ich hier falsch?
Vielleicht bevorzugen Sie es, "grep" mit dem Befehl "find" zu kombinieren, um eine vollständige Lösung wie:
find . -exec grep -Hn search {} \;
Dieser Befehl durchsucht versteckte Dateien oder Verzeichnisse nach der Zeichenfolge "Suche" und listet alle Dateien auf, die mit diesem Ausgabeformat übereinstimmen:
Dateipfad: Zeilennummer: Zeile mit Zufall
./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line
Möglicherweise möchten Sie diesen Ansatz verwenden, vorausgesetzt, Sie durchsuchen das aktuelle Verzeichnis (andernfalls ersetzen Sie es durch das gewünschte Verzeichnis):
find . -type f | xargs grep search
oder wenn Sie nur auf der obersten Ebene suchen möchten (was schneller zu testen ist, wenn Sie diese ausprobieren):
find . -type f -maxdepth 1 | xargs grep search
UPDATE: Ich habe die Beispiele als Reaktion auf Scotts Kommentare geändert. Ich habe auch "-type f" hinzugefügt.
~
ist das Home-Verzeichnis des Benutzers. Die Frage bezog sich nicht auf das Home-Verzeichnis des Benutzers, daher sollte die Antwort nicht erwähnt werden ~
. (2) In einem find
Befehl -name '*'
ist ein No-Op (dh es hat keinen Zweck).
So suchen Sie NUR alle versteckten Dateien und Verzeichnisse von Ihrem aktuellen Standort aus:
find . -name ".*" -exec grep -rs search {} \;
NUR alle versteckten Dateien:
find . -name ".*" -type f -exec grep -s search {} \;
NUR alle versteckten Verzeichnisse:
find . -name ".*" -type d -exec grep -rs search {} \;
So finden Sie nur in einem bestimmten Ordner:
ls -al | grep " \."
Es ist ein sehr einfacher Befehl zum Auflisten und Weiterleiten an grep.
Zusätzlich zu Tylers Vorschlag ist hier der Befehl, alle Dateien und Ordner einschließlich versteckter Dateien rekursiv zu erfassen
find . -name "*.*" -exec grep -li 'search' {} \;
Um zu verhindern , Matching .
und ..
die Dateien nicht ausgeblendet sind, können Sie grep
mit , ls -A
wie in diesem Beispiel:
ls -A | grep "^\."
^\.
gibt an, dass das erste Zeichen sein muss .
Die -A
oder --almost-all
Option schließt die Ergebnisse .
und ..
damit nur versteckte Dateien und Verzeichnisse abgestimmt sind.
Sie können auch nach bestimmten Arten von versteckten Dateien suchen, z. B. nach versteckten Verzeichnisdateien:
grep -r --include=*.directory "search-string"
Dies funktioniert möglicherweise besser als einige der anderen Optionen. Die anderen Optionen, die funktionierten, können zu langsam sein.