Nach Dateien und Inhalten suchen mit find und grep



In Linux kann man auf zwei verschiedenen Arten nach Dateien und Inhalten suchen. Wir beschäftigen uns in diesem Artikel mit find und grep.
Entweder lassen sich Dateien nur anhand ihrer Meta-Daten suchen oder anhand des Inhalts. Beides hat seine Vor- und Nachteile, die nachfolgend beleuchtet werden.

find

Mit find kann man Dateien anhand ihrer Meta-Daten suchen. Es lässt sich zum Beispiel nach dem Dateinamen, Größe, Änderungsdatum, Ersteller etc. suchen. Ein Beispiel soll das verdeutlichen:
# Findet alle Konfigurationsdateien im Verzeichnis /etc, unabhängig von Groß-/Kleinschreibung 
find /etc -maxdepth 2 -iname "*.conf" 

# Sucht im Home-Verzeichnis nach regulären Dateien, die größer als 100 Megabyte sind 
find ~ -type f -size +100M 

# Listet Logdateien auf, die in den letzten 24 Stunden geändert wurden 
find /var/log -type f -name "*.log" -mtime -1
Der find Befehlt eignet sich also ideal, wenn man nach konkreten Eigenschaften von Dateien, wie Namen, Änderungsdatum oder Größe suchen möchte. Wenn man allerdings nach einem bestimmten Inhalt suchen möchte, ist der Befehl nicht geeignet.

grep

Der Befehl grep ist im Gegensatz zu find grundsätzlich anders. Hier wird nach dem Inhalt einer Datei gesucht und nicht anhand der Eigenschaften. Er eignet sich wunderbar, um zum Beispiel nach bestimmten Fehlernachrichten etc. zu suchen. Hier ein Beispiel:
# Durchsucht alle Dateien im aktuellen Verzeichnis nach einem Begriff, ignoriert Groß-/Kleinschreibung 
grep -in "error" *.log 

# Sucht rekursiv in /etc nach einer IP-Adresse und listet nur Dateinamen auf 
grep -rl "192.168.1.1" /etc/ 

# Schließt Binärdateien aus und filtert nach Zeilen, die mit 'Port' beginnen 
grep -In "^Port" /etc/ssh/sshd_config
Die Suche nach konkreten (Teil-)Inhalten ist hiermit sichtlich einfach. Aufpassen sollte man bei großen Verzeichnissen mit vielen Dateien und solchen mit viel Inhalt. Dann kann grep sehr langsam und inperformant werden.

Kombination aus find und grep

Die Vorteile beider Befehle zu vereinbaren, kann man find und grep geschickt kombinieren. Zuerst lassen sich Dateien mithilfe von find filtern und dann sucht grep nur noch in diesen gefilterten Dateien. 

Nachfolgend ein Beispiel, um auf einem Webserver nach PHP-Dateien zu suchen, die den Schlüsselbegriff "DB_PASSWORD" enthalten:
# Sucht nach im Ornder /var/www nach PHP-Dateien mit dem Inhalt DB_PASSWORD
find /var/www -type f -name "*.php" | xargs grep -H "DB_PASSWORD"

# Alternativ mit -exec
find /var/www -type f -name "*.php" -exec grep -H "DB_PASSWORD" {} +

10.11.2026