Inhaltsverzeichnis

find

find ist ein mächtiges Kommandozeilenwerkzeug zum Durchsuchen von Verzeichnisstrukturen. Es findet Dateien und Verzeichnisse basierend auf Namen, Größe, Datum, Berechtigungen und vielen weiteren Kriterien. find ist unverzichtbar für Systemadministration, Backup-Strategien und Dateimanagement.

Voraussetzungen

Grundlegende Syntax

find [PFAD...] [OPTIONEN] [AUSDRUCK]

Häufige Anwendungsfälle

Nach Namen suchen

# Exakter Name
find /pfad -name "datei.txt"
 
# Mit Wildcards
find /pfad -name "*.log"
 
# Groß-/Kleinschreibung ignorieren
find /pfad -iname "*.TXT"
 
# Mehrere Muster
find /pfad -name "*.txt" -o -name "*.log"

Nach Typ suchen

# Nur Dateien
find /pfad -type f
 
# Nur Verzeichnisse
find /pfad -type d
 
# Symbolische Links
find /pfad -type l
 
# Sockets
find /pfad -type s

Nach Größe suchen

# Größer als 100MB
find /pfad -size +100M
 
# Kleiner als 1KB
find /pfad -size -1k
 
# Genau 50 Bytes
find /pfad -size 50c
 
# Leere Dateien
find /pfad -type f -empty

Nach Datum suchen

# Geändert in den letzten 7 Tagen
find /pfad -mtime -7
 
# Älter als 30 Tage
find /pfad -mtime +30
 
# Geändert in den letzten 2 Stunden
find /pfad -mmin -120
 
# Zugegriffen heute
find /pfad -atime 0

Nach Berechtigungen suchen

# Dateien mit 777-Rechten
find /pfad -perm 777
 
# Dateien mit mindestens Leserechten für alle
find /pfad -perm -444
 
# SUID-Dateien finden
find /pfad -perm /4000
 
# Beschreibbare Dateien für Gruppe
find /pfad -perm -g=w

Erweiterte Suche

Nach Besitzer suchen

# Nach Benutzername
find /pfad -user username
 
# Nach UID
find /pfad -uid 1000
 
# Nach Gruppe
find /pfad -group groupname
 
# Dateien ohne gültigen Besitzer
find /pfad -nouser

Suchtiefe begrenzen

# Nur aktuelles Verzeichnis
find /pfad -maxdepth 1 -name "*.txt"
 
# Mindestens 2 Ebenen tief
find /pfad -mindepth 2 -name "*.log"
 
# Symbolische Links nicht folgen
find /pfad -P -type l

Logische Operatoren

# UND (implizit)
find /pfad -name "*.txt" -size +1M
 
# ODER
find /pfad -name "*.txt" -o -name "*.log"
 
# NICHT
find /pfad ! -name "*.txt"
 
# Kombiniert
find /pfad \( -name "*.txt" -o -name "*.log" \) -size +1M

Aktionen auf gefundene Dateien

Ausführen von Befehlen

# Mit -exec (ein Befehl pro Datei)
find /pfad -name "*.tmp" -exec rm {} \;
 
# Mit -exec und Bestätigung
find /pfad -name "*.bak" -ok rm {} \;
 
# Mehrere Dateien an einen Befehl (effizienter)
find /pfad -name "*.txt" -exec grep "Suchbegriff" {} +
 
# Mit xargs (parallel, effizienter)
find /pfad -name "*.log" | xargs gzip

Informationen ausgeben

# Detaillierte Ausgabe (wie ls -l)
find /pfad -name "*.conf" -ls
 
# Nur Dateinamen
find /pfad -name "*.txt" -print
 
# Mit Nullzeichen getrennt (sicher für Dateinamen mit Leerzeichen)
find /pfad -name "*.txt" -print0 | xargs -0 grep "Muster"
 
# Mit printf formatieren
find /pfad -printf "%p %s %u\n"

Praktische Beispiele

Systemwartung

# Alte Log-Dateien finden und löschen
find /var/log -name "*.log" -mtime +90 -delete
 
# Große Dateien finden (über 1GB)
find / -type f -size +1G 2>/dev/null | head -20
 
# Temporäre Dateien aufräumen
find /tmp -type f -atime +7 -delete
 
# Verwaiste Dateien ohne Besitzer
find / -nouser -o -nogroup 2>/dev/null

Sicherheit

# SUID/SGID-Dateien finden
find / -perm /6000 -type f 2>/dev/null
 
# Weltweit beschreibbare Dateien
find / -perm -002 -type f 2>/dev/null
 
# Dateien mit unsicheren Rechten
find /home -type f -perm 777 2>/dev/null
 
# SSH-Schlüssel mit falschen Rechten
find ~/.ssh -type f ! -perm 600

Backup und Archivierung

# Dateien des letzten Tages archivieren
find /data -type f -mtime -1 | tar -czf backup.tar.gz -T -
 
# Duplikate nach Größe finden
find /pfad -type f -exec du -h {} + | sort -h | uniq -d -w 10
 
# Backup nur geänderter Dateien
find /source -type f -newer /marker.txt -exec cp {} /backup/ \;

Entwicklung

# Alle Python-Dateien finden und Syntax prüfen
find . -name "*.py" -exec python3 -m py_compile {} \;
 
# TODO-Kommentare in Code finden
find . -name "*.js" -exec grep -Hn "TODO" {} \;
 
# Leere Verzeichnisse entfernen
find . -type d -empty -delete
 
# Dateien nach Erweiterung zählen
find . -type f | sed 's/.*\.//' | sort | uniq -c

Multimedia

# Bilder größer als 5MB komprimieren
find ~/Pictures -name "*.jpg" -size +5M -exec mogrify -quality 85 {} \;
 
# Musik nach Künstler organisieren
find ~/Music -name "*.mp3" -exec bash -c 'mkdir -p "$(dirname "$1")/$(id3 -q "%a" "$1")" && mv "$1" "$(dirname "$1")/$(id3 -q "%a" "$1")/"' _ {} \;
 
# Videos älter als 1 Jahr löschen
find ~/Videos -name "*.mp4" -mtime +365 -delete

Nützliche Optionen

Option Bedeutung
-name Suche nach Name (case-sensitive)
-iname Suche nach Name (case-insensitive)
-type Dateityp (f=Datei, d=Verzeichnis, l=Link)
-size Dateigröße (c=Bytes, k=KB, M=MB, G=GB)
-mtime Änderungsdatum in Tagen
-atime Zugriffsdatum in Tagen
-ctime Änderung der Metadaten in Tagen
-mmin Änderungsdatum in Minuten
-perm Dateiberechtigungen
-user Besitzer
-group Gruppe
-maxdepth Maximale Suchtiefe
-mindepth Minimale Suchtiefe
-exec Befehl ausführen
-delete Gefundene Dateien löschen
-print Ausgabe (Standard)
-ls Detaillierte Ausgabe

Hinweise

Fehlerbehebung

Siehe auch