====== 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 ===== * Zugriff auf die Linux-Kommandozeile * Grundkenntnisse in [[sammlung:bash_kommandos|Bash-Kommandos]] * Optional: Verständnis von [[sammlung:dateirechte_uebersicht|Dateiberechtigungen]] ===== 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 ===== * find durchsucht rekursiv; nutze ''-maxdepth 1'' für nur ein Verzeichnis * Verwende ''2>/dev/null'' um Fehler zu unterdrücken (z.B. bei fehlenden Berechtigungen) * ''-exec'' mit ''\;'' führt Befehl für jede Datei aus; mit ''+'' wird Befehl einmal mit allen Dateien ausgeführt * ''-delete'' ist sicherer als ''-exec rm'', aber teste immer zuerst mit ''-print'' * Bei Dateinamen mit Leerzeichen nutze ''-print0'' mit ''xargs -0'' * find gibt Exit-Code 0 zurück, wenn alle Dateien erfolgreich verarbeitet wurden ===== Fehlerbehebung ===== * **"Permission denied"**: Nutze ''sudo'' oder filtere Fehler mit ''2>/dev/null'' * **Zu viele Ergebnisse**: Verfeinere Kriterien oder nutze ''-maxdepth'' * **Befehl nicht gefunden**: Prüfe Pfad oder nutze absoluten Pfad in ''-exec'' * **Dateinamen mit Sonderzeichen**: Nutze ''-print0'' und ''xargs -0'' * **Langsame Suche**: Schränke Suchbereich ein oder nutze ''locate'' für schnelle Namenssuche ===== Siehe auch ===== * [[sammlung:grep|grep - Textdurchsuchung]] * [[sammlung:ls|ls - Verzeichnisse auflisten]] * [[sammlung:dateirechte_uebersicht|Dateiberechtigungen]] * [[sammlung:bash_kommandos|Bash Kommandos Übersicht]] * [[sammlung:tar|tar - Archivierung]] {{tag>linux kommandozeile dateien suche verwaltung system}}