Benutzer-Werkzeuge

Webseiten-Werkzeuge


edv:os:unix:shell:example:find

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

edv/os/unix/shell/example/find.txt · Zuletzt geändert: 2024/04/09 12:06 von Jürgen Kreick

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki