sammlung:find
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
- Zugriff auf die Linux-Kommandozeile
- Grundkenntnisse in Bash-Kommandos
- Optional: Verständnis von 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 |
| Ausgabe (Standard) | |
| -ls | Detaillierte Ausgabe |
Hinweise
- find durchsucht rekursiv; nutze
-maxdepth 1für nur ein Verzeichnis - Verwende
2>/dev/nullum Fehler zu unterdrücken (z.B. bei fehlenden Berechtigungen) -execmit\;führt Befehl für jede Datei aus; mit+wird Befehl einmal mit allen Dateien ausgeführt-deleteist sicherer als-exec rm, aber teste immer zuerst mit-print- Bei Dateinamen mit Leerzeichen nutze
-print0mitxargs -0 - find gibt Exit-Code 0 zurück, wenn alle Dateien erfolgreich verarbeitet wurden
Fehlerbehebung
- „Permission denied“: Nutze
sudooder filtere Fehler mit2>/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
-print0undxargs -0 - Langsame Suche: Schränke Suchbereich ein oder nutze
locatefür schnelle Namenssuche
Siehe auch
sammlung/find.txt · Zuletzt geändert: von 127.0.0.1
