Inhaltsverzeichnis
find
Dateien nach Namen (und/oder Eigenschaften) suchen
find Pfad -name GesuchteDeteiName -print 2>/dev/null
z.B. die Datei "text.txt" im aktuellen Verzeichniss (inklusive Unterverzeichnisse) suchen:
find . -name text.txt -print 2>/dev/null
Alle regulären Dateien (keine Verzeichnisse oder Gerätedateien) rekursiv ab dem aktuellen Verzeichnis auflisten:
find . -type f -exec ls {} ;
Um symbolische Links dabei zu ignorieren (das '!' negiert das darauf folgende -type l):
find . ! -type l -exec ls {} ;
Durch den Parameter "-maxdepth n" kann man die Tiefe des Suchvorgangs auf n Verzeichnisebenen beschränken.
Directories in Filesystem auflisten:
find . -type d -print
Suchen aller Files die jünger sind als ein Vergleichsfile:
find . -newer <vergleichsfile> -print
Suchen aller Files die in den letzten 7 Tagen verändert wurden:
find . ! -mtime +7 -print
Suchen aller Files die in den letzten 7 Tagen NICHT verändert wurden:
find . -mtime +7 -print
Suchen aller Files samt User- und Gruppenzugehörigkeit, aber nur Verzeichnisnamen und Berechtigungen ausgeben (Filename abschneiden):
find . -name "*" -type f -ls 2>/dev/null | awk '{print $5, $6, $11}' | sed 's#[^/]*$##'
Dateien nach Inhalte suchen
Ist man mit der Ausgabe von Dateinamen zufrieden, so kann man das ls-Kommando durch das eigentlich gewünschte ersetzen. Die Zeichenfolge {} wird jeweils durch den Namen der Datei ersetzt, bevor das Kommando aufgerufen wird.
z.B. alle Dateien (also ab '/' bzw. '.') nach dem String "www.kreick.de" durchsuchen:
find / -exec grep "www.kreick.de" {} \; -print 2>/dev/null find . -exec grep "www.kreick.de" {} \; -print 2>/dev/null
(Die Option -print kann man weglassen.)
Suchen aller Files (Filename) welche "pattern" (hier "stdio.h") enthalten:
find . -type f -exec grep -l "stdio.h" {} \;
Suchen aller Files welche "pattern" enthalten mit Ausgabe der Zeile (gesamten Zeileninhalt), die das genannte Muster beinhaltet:
find . -type f -exec grep "stdio.h" {} \;
Dateien nach Eigenschaften suchen und darauf Kommandos ausführen
Veraltete Dateien löschen (hier älter als 5 Tage):
find /Absoluter/Pfad -name DateiNameMuster -mtime +5 -exec rm {} \;
Konkrett:
find /trace/prg123 -name "*" -mtime +5 -exec rm {} \; find /trace/prg123 -name "*" -mtime +5 -exec rm {} +
Der Unterschied zwischen den beiden Kommandos ('+' statt '\;') besteht darin, daß im ersten Fall rm für jede Datei separat aufgerufen wird (ressourcefressend), im zweiten wird erst die Liste mit den Dateinamen erstellt und dann auf einmal die ganze Liste dem rm übergeben (viel schneller). Bei übermäßig langen Verzeichnissen kann jedoch die 2. Variante zu Fehlerhaften Ergebnissen führen.
Alle Files mit der Endung (.o) in Filesystem löschen:
find . -name "*.o" -exec rm -i {} \;
Löschen aller "core" und "*.BAK" Files:
find . (-name core -o -name '*.BAK') -exec rm -f {} \;
Alle Files/Verzeichnisse/Sonstiges ab dem aktuellen Verzeichnis finden, die keinem gültigen User gehören:
find . -nouser -ls 2>/dev/null
Alle Files/Verzeichnisse/Sonstiges ab dem aktuellen Verzeichnis finden, die keine gültige Gruppe besitzen:
find . -nogroup -ls 2>/dev/null
Alle Files/Verzeichnisse ab dem aktuellen Verzeichnis finden, die keinen gültigen User besitzen, und den Owner auf "zieluser" ändern:
find . -nouser -type f -exec chown --changes zieluser {} \; 2>/dev/null find . -nouser -type d -exec chown --changes zieluser {} \; 2>/dev/null
Alle Files/Verzeichnisse ab dem aktuellen Verzeichnis finden, die keine gültige Gruppe besitzen, und die Gruppenzugehörigkeit auf "zielgruppe" ändern:
find . -nogroup -type f -exec chgrp --changes zielgruppe {} \; 2>/dev/null find . -nogroup -type d -exec chgrp --changes zielgruppe {} \; 2>/dev/null
Suchkriterien (Quelle: https://wiki.ubuntuusers.de/find/):
Kriterium | Beschreibung |
---|---|
-amin n | Sucht nach Dateien, die innerhalb der letzten n Minuten gelesen wurden |
-mtime +n | Sucht nach Dateien, die älter als n Tage sind (Beispiel: "-mtime +3" alles was älter als 3 Tage ist) |
-mtime -n | Sucht nach Dateien, die weniger als n Tage alt sind |
-iname DATEI | Sucht nach Dateien mit dem Namen DATEI ohne Beachtung der Groß und Kleinschreibung |
-newer DATEI | Sucht nach Dateien, die nach DATEI verändert wurden |
-nouser | Sucht nach Dateien, deren User-ID keinem Benutzer entspricht |
-nogroup | Sucht nach Dateien, deren Gruppen-ID keiner Gruppe entspricht |
-type f | Sucht nur nach regulären Dateien |
-type d | Sucht nur nach Verzeichnissen |
-user BENUTZER | Sucht nur nach Dateien des Benutzers BENUTZER |
Stand: 08.04.2024
EOF