find ist das Kommando, um Dateien nach bestimmten Kriterien zu suchen (und zu finden).

Zeitangaben

Die Zeitangaben (bei -a/c/mtime und -a/c/mmin) um Dateien an Hand ihrer Zeitstempel zu finden, sind leider nicht sehr gut dokumentiert.

  • Die Zeitberechnung bezieht sich immer auf die aktuelle Uhrzeit (des gestrigen Tages, in den Formeln hier ist das berücksichtigt)
    • -mtime +n: älter als jetzt - 24h*(n+1)

    • -mtime n: Alter zwischen jetzt - 24h*(n+1) und jetzt - 24h*n

    • -mtime -n: neuer als jetzt - 24h*n

  • Mit -daystart wird 00:00 Uhr (des heutigen Tages) anstelle der aktuellen Uhrzeit benutzt.

    • -daystart -mtime +n: älter als 00:00 - 24h*n

    • -daystart -mtime n: Alter zwischen 00:00 - 24h*n und jetzt - 24h*(n-1)

    • -daystart -mtime -n: neuer als 00:00 - 24h*(n-1)

  • /!\ -daystart muss vor der Zeitangabe stehen!

  • Suche im Minutenraster
    • -mmin +n: älter als jetzt - n min

    • -mmin n: Alter genau n min

    • -mmin -n: neuer als `jetzt - n min

Boolsche Operatoren

Standardmäßig müssen alle Bedingungen erfüllt sein, damit eine so beschriebene Datei gefunden wird (AND). Alternativen (OR) können mit -o gebildet werden:

  • find -iname cache -o -iname cache4

findet alle Dateien, die cache oder cache4 heißen.

Klammern kann man auch setzen:

  • find -type d \( -iname cache -o -iname cache4 \)

findet alle Verzeichnisse (-type d), die cache oder cache4 heißen.

Eine Bedingung kann auch invertiert werden:

  • find ! -type d

findet jede Datei, die kein Verzeichnis ist.

Tipps + Tricks

Bei find kommt es oft vor, das die Argumentliste zu lang wird. Dann muss man entweder mit einer for-Schleife arbeiten, oder mit xargs. Dann werden die Suchergebnisse einzeln übergeben.

Beispiele

  • suchen einer Datei nach ihrem Namen: find /home/luser -name 'Datei*Name*Mit*Wildcards*'

  • dito, aber ohne Groß/Kleinschreibung zu beachten: find /home/luser -iname 'Datei*Name*Mit*Wildcards*'

  • alle Dateien rekursiv auflisten: find .

  • alle Unterverzeichnisse auflisten: find -type d

  • Suche im gesamten Dateisystem nach Dateien, die auf ".tar" enden find / -name "*.tar"

  • Suche alle Dateien, die im Namen "eintest" haben find / -name "*eintest*"

  • Finde & lösche firefox lock Dateien find ~/.mozilla -name .parentlock -o -name lock -exec rm -f {} \;

  • Ganz bestimmte Pfad/Namenskombinationen: find /var/www/virtual/ -path "*/logs/*-access.log"

Zusatz:

Suche alle Dateien unter ~/gambas, deren Name mit ".class" endet und die im Inhalt "eintest" enthalten

  • find ~/gambas -name "*.class" -exec grep -H "eintest" {} \;

Dateinamen in Kleinbuchstaben umwandeln

  • find -type f | (while read f; do n=$(echo $f | tr "[:upper:]" "[:lower:]"); mv "$f" "$n"; done)

Für alle Dateien, die in einem Unterverzeichnis "german" vorkommen die Zugriffe ändern

  • for i in $(find -type d -name 'german'); do chmod a+r $i/*; done

Siehe auch DateienSuchen und SuchenundFinden, auch für weitere Beispiele

find (zuletzt geändert am 2011年04月07日 07:54:11 durch p54AB5641)

AltStyle によって変換されたページ (->オリジナル) /