Unterschiede zwischen den Revisionen 15 und 16
Revision 15 vom 2007-12-23 22:47:48
Größe: 2467
Autor: localhost
Kommentar: converted to 1.6 markup
Revision 16 vom 2009-08-20 08:32:04
Größe: 3029
Kommentar: Boolsche Operatoren
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 23: Zeile 23:
= 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.
Zeile 24: Zeile 37:
Zeile 28: Zeile 40:
Zeile 40: Zeile 51:
 {{{find ~/gambas -name "*.class" -exec grep -H "eintest" {} \; }}}
 .
{{{find ~/gambas -name "*.class" -exec grep -H "eintest" {} \; }}}
Zeile 43: Zeile 55:
 {{{ find -type f | (while read f; do n=$(echo $f | tr "[:upper:]" "[:lower:]"); mv "$f" "$n"; done) }}}
 .
{{{ find -type f | (while read f; do n=$(echo $f | tr "[:upper:]" "[:lower:]"); mv "$f" "$n"; done) }}}
Zeile 46: Zeile 59:
 {{{for i in $(find -type d -name 'german'); do chmod a+r $i/*; done}}}
 .
{{{for i in $(find -type d -name 'german'); do chmod a+r $i/*; done}}}

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 {} \;

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)