Der Befehl find durchsucht Verzeichnisse rekursiv nach Dateien und Verzeichnissen. Mit verschiedenen Filterkriterien wie Name, Typ, Größe oder Änderungsdatum lassen sich gezielt bestimmte Dateien aufspüren und optional direkt weiterverarbeiten.

Syntax des find-Befehls

find [PFAD] [AUSDRUCK]
  • PFAD – Das Startverzeichnis für die Suche. Bei . wird im aktuellen Verzeichnis gesucht, bei / im gesamten Dateisystem.
  • AUSDRUCK – Suchkriterien und Aktionen, die auf gefundene Dateien angewendet werden.

Um ein Verzeichnis zu durchsuchen, benötigst du Leserechte für dieses Verzeichnis.

Nach Dateinamen suchen

Die Option -name sucht nach Dateien mit einem bestimmten Namen:

find /home/benutzer -name "config.txt"

Dieser Befehl durchsucht /home/benutzer und alle Unterverzeichnisse nach einer Datei namens config.txt.

Für eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung verwendest du -iname:

find /var/log -iname "error.log"

So werden error.log, Error.log und ERROR.LOG gleichermaßen gefunden.

Platzhalter verwenden

Mit dem Sternchen * als Platzhalter suchst du nach Dateiendungen oder Namensmustern:

find /var/www -name "*.html"

Setze das Muster in Anführungszeichen, damit die Shell das Sternchen nicht vorzeitig auswertet.

Um alle Dateien zu finden, die nicht einem Muster entsprechen, kombinierst du -not mit -name:

find /var/log -not -name "*.gz"

Dieser Befehl listet alle Dateien auf, die nicht auf .gz enden.

Nach Dateityp filtern

Die Option -type schränkt die Suche auf bestimmte Dateitypen ein:

TypBedeutung
fNormale Datei
dVerzeichnis
lSymbolischer Link

Um nur Verzeichnisse zu finden:

find /opt -type d -name "backup*"

Um nur reguläre Dateien zu finden:

find . -type f -name "*.conf"

Nach Dateigröße suchen

Mit -size filterst du nach der Dateigröße. Die Suffixe bestimmen die Einheit:

SuffixEinheit
cBytes
kKilobytes
MMegabytes
GGigabytes

Um Dateien zu finden, die größer als 100 Megabyte sind:

find /home -type f -size +100M

Das Pluszeichen + steht für „größer als", das Minuszeichen - für „kleiner als".

Um Dateien zu finden, die kleiner als 1 Kilobyte sind:

find . -type f -size -1k

Für einen Größenbereich kombinierst du zwei -size-Optionen:

find /var/log -type f -size +10M -size -100M

Dieser Befehl findet Dateien zwischen 10 und 100 Megabyte.

Nach Änderungsdatum suchen

Die Option -mtime sucht nach dem Änderungsdatum in Tagen. Der Wert gibt die Anzahl der Tage an:

find /etc -name "*.conf" -mtime -7

Dieser Befehl findet alle .conf-Dateien, die innerhalb der letzten 7 Tage geändert wurden.

Um Dateien zu finden, die vor mehr als 30 Tagen geändert wurden:

find /home/benutzer -type f -mtime +30

Für genauere Zeitangaben in Minuten verwendest du -mmin:

find /tmp -type f -mmin -60

Dieser Befehl findet Dateien, die in den letzten 60 Minuten geändert wurden.

Nach Berechtigungen suchen

Mit -perm filterst du nach Dateiberechtigungen:

find /var/www -type f -perm 644

Dieser Befehl findet alle Dateien mit exakt den Berechtigungen 644.

Ein vorangestellter Schrägstrich / bedeutet, dass mindestens eines der angegebenen Bits gesetzt sein muss:

find . -perm /111

Dieser Befehl findet alle Dateien, die für Besitzer, Gruppe oder andere ausführbar sind.

Ein vorangestelltes Minuszeichen - bedeutet, dass mindestens die angegebenen Bits gesetzt sein müssen:

find . -perm -644

Nach Besitzer suchen

Die Option -user filtert nach dem Dateibesitzer:

find /home -user max -type f

Mit -group filterst du nach der Gruppenzugehörigkeit:

find /var/www -group www-data -type f

Aktionen auf gefundene Dateien anwenden

Mit -exec führst du Befehle auf jeder gefundenen Datei aus. Die geschweiften Klammern {} werden durch den Dateinamen ersetzt:

find /var/www -type d -exec chmod 755 {} \;

Dieser Befehl setzt die Berechtigung 755 auf alle Verzeichnisse unter /var/www.

Das Semikolon am Ende muss mit einem Backslash escaped werden, damit die Shell es nicht interpretiert.

Ein praxisnahes Beispiel: Alle Dateien eines Benutzers einem anderen zuweisen:

find /var/www -user altbenutzer -exec chown neubenutzer {} \;

Gefundene Dateien löschen

Die Option -delete löscht alle gefundenen Dateien:

find /tmp -name "*.tmp" -type f -delete

Vorsicht: Teste den Befehl zuerst ohne -delete, um zu prüfen, welche Dateien betroffen sind. Die Option löscht Dateien unwiderruflich und ohne Nachfrage.

Die Option -delete kann nur leere Verzeichnisse löschen. Für Verzeichnisse mit Inhalt verwendest du -exec rm -r {} \;.

Suchtiefe begrenzen

Mit -maxdepth beschränkst du die Suchtiefe auf eine bestimmte Anzahl von Ebenen:

find /home -maxdepth 2 -name "*.txt"

Dieser Befehl durchsucht /home und eine Ebene darunter, aber keine tieferen Unterverzeichnisse.

Mit -mindepth ignorierst du die ersten Ebenen:

find /var -mindepth 2 -type f -name "*.log"

Mehrere Kriterien kombinieren

Mehrere Optionen werden standardmäßig mit UND verknüpft. Für eine ODER-Verknüpfung verwendest du -o:

find . -name "*.txt" -o -name "*.md"

Dieser Befehl findet Dateien, die entweder auf .txt oder .md enden.

Komplexere Ausdrücke lassen sich mit Klammern gruppieren (escaped mit Backslash):

find . \( -name "*.txt" -o -name "*.md" \) -mtime -7

Zusammenfassung

Der Befehl find ist ein vielseitiges Werkzeug zum Aufspüren von Dateien nach verschiedenen Kriterien. Mit -name, -type, -size, -mtime und -perm lassen sich Suchergebnisse präzise eingrenzen. Die Option -exec ermöglicht die direkte Weiterverarbeitung gefundener Dateien.

Verwandte Artikel