Wie kann ich versteckte Dateien durchsuchen?


96

Ich suche in einem Git-Repository und möchte den .gitOrdner 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:


135

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 .gitanstelle 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.


1
Der erste Ansatz (grep -r search *. *) Hat bei mir funktioniert. Der zweite Ansatz (grep -r search.) Hat die Zeichenfolge nicht gefunden. Ich habe ähnliche Ergebnisse gefunden, als ich das "-r" weggelassen und nur das Verzeichnis der obersten Ebene durchsucht habe. Ich benutze GNU grep 2.6.3.
Alan

@ Alan: Das ist komisch. Ich benutze das regelmäßig. Haben Sie es im selben Verzeichnis versucht?
Bitmaske

27
using .*wird das übergeordnete Verzeichnis enthalten (weil ..Übereinstimmungen)
sehe

1
Ist es sicher, diese Lösung zu verallgemeinern, da das Verhalten zwischen den Schalen variieren kann?
Astletron

6
Für die erste Version sollten Sie --exclude-dir = .. hinzufügen, um die Suche in den übergeordneten Ordnern zu vermeiden
user762353

11

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 * .[^.]*

Ich bekomme keine Ergebnisse damit: sudo grep -r ANDROID_HOME * .[^.]*Was mache ich hier falsch?
Messerschnabel

@messerbill wo läufst du?
Insaner

3

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

2

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.


1
(1)  ~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  findBefehl -name '*'ist ein No-Op (dh es hat keinen Zweck).
Scott

1

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 {} \;

1

Alle anderen Antworten sind besser. Dieser könnte leicht zu merken sein:

find . -type f | xargs grep search

Es werden nur Dateien (einschließlich versteckter) gefunden und jede Datei erfasst.


0

So finden Sie nur in einem bestimmten Ordner:

ls -al | grep " \."

Es ist ein sehr einfacher Befehl zum Auflisten und Weiterleiten an grep.


0

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' {} \;

0

Um zu verhindern , Matching .und ..die Dateien nicht ausgeblendet sind, können Sie grepmit , ls -Awie in diesem Beispiel:

ls -A | grep "^\."

^\. gibt an, dass das erste Zeichen sein muss .

Die -Aoder --almost-allOption schließt die Ergebnisse .und ..damit nur versteckte Dateien und Verzeichnisse abgestimmt sind.


0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.