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 [[ZeitStempelVonDateien|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