it-swarm.com.de

Wie kann ich versteckte Dateien grepen?

Ich durchsuche ein Git-Repository und möchte den .git-Ordner hinzufügen.

grep enthält diesen Ordner bei der Ausführung nicht

grep -r search *

Was wäre ein Grep-Befehl, um diesen Ordner aufzunehmen?

71
Steven Penny

Bitte verwende die Lösung am Ende dieses Beitrags als eine bessere Alternative zu dem, was du tust.

Sie können versteckte Dateien explizit einschließen (ein Verzeichnis ist auch eine Datei).

grep -r search * .*

* stimmt mit allen Dateien außer den versteckten überein und .* wird nur mit versteckten Dateien übereinstimmen. Dies schlägt jedoch fehl, wenn sich in einem bestimmten Verzeichnis entweder keine nicht versteckten Dateien oder keine versteckten Dateien befinden. Sie können natürlich .git anstelle von .* explizit hinzufügen.

Wenn Sie jedoch nur in einem bestimmten Verzeichnis suchen möchten, gehen Sie folgendermaßen vor:

grep -r search .

. stimmt mit dem aktuellen Pfad überein, der sowohl nicht versteckte als auch versteckte Dateien enthält.

105
bitmask

Ich bin gerade auf dieses Problem gestoßen und basierend auf der Antwort von @ bitmask, hier meine einfache Modifikation, um das von @sehe aufgeführte Problem zu vermeiden:

grep -r search_string * .[^.]*
7
insaner

Möglicherweise kombinieren Sie "grep" mit dem Befehl "find", um komplette Lösungen wie

find . -exec grep -Hn search {} \;

Dieser Befehl durchsucht versteckte Dateien oder Verzeichnisse nach der Zeichenfolge "search" und listet jede Datei zufällig mit diesem Ausgabeformat auf:

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
3
Olvathar

Möglicherweise möchten Sie diesen Ansatz verwenden:

find ~ -name '*' | xargs grep search

oder wenn Sie nur auf oberster Ebene suchen möchten (was schneller zu testen ist, wenn Sie diese ausprobieren):

find ~ -maxdepth 1 -name '*' | xargs grep search
2
Alan

Um zu verhindern, dass . und .., die keine versteckten Dateien sind, übereinstimmen, können Sie grep mit ls -A wie im folgenden Beispiel verwenden:

ls -A | grep "^\."

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

Die Option -A oder --almost-all schließt die Ergebnisse . und .. aus, sodass nur versteckte Dateien und Verzeichnisse abgeglichen werden.

0
mchid

Um nur innerhalb eines bestimmten Ordners zu suchen, können Sie Folgendes verwenden:

ls -al | grep " \."

Sehr einfacher Befehl zum Auflisten und Weiterleiten an grep

0
Jason

Alle anderen Antworten sind besser. Das ist vielleicht leicht zu merken:

find . -type f | xargs grep search

Sucht nur Dateien (einschließlich versteckter Dateien) und grep jede Datei

0
PrashantB

So durchsuchen Sie NUR alle versteckten Dateien und Verzeichnisse an Ihrem aktuellen Speicherort:

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

Zusätzlich zu Tylers Vorschlag gibt es hier den Befehl, alle Dateien und Ordner einschließlich versteckter Dateien rekursiv zu prüfen

find . -name "*.*" -exec grep -li 'search' {} \;
0
nikhilgoel1985