orm@doc-tcpip.org

Erstellt: März 1999 - Letzte Modifikation: März 2014

[ Main | Local ]


Das find-Kommando


Das find-Kommando stellt eine Syntax mit einer ganzen Reihe von Keywörtern zur Verfügung, die Eigenschaften beschreiben, nach denen man suchen kann:

Die Keywörter kann man zu Konditionen verknüpfen: Mit -a erhält man ein logisches und, mit -o ein logisches oder. Das ! negiert eine Kondition. Dazu ein paar Beispiele:

\( -perm -4000 -o -perm -2000 \)
\( -perm -4000 -a -user Sepp \)
\( -mtime +4 -o -atime +30 \)
Alle Files, die vor mehr als 4 Tagen modifiziert worden sind oder
vor mehr als 30 Tage das letzte mal angefasst worden sind.

\! -user root -name \*.sh

Alle Files *.sh ausser die vom User root.
Mit dem Keywort expression kann man komplexe Konditionen bauen - siehe man-Page.

Man kann mit dem Ergebnis der Suche etwas anfangen: Mit -print wird das Ergebnis ausgegeben, mit -exec kann man die Ausgabe als Eingabe für Kommandos benutzen. Mit dem Keywort -prune steigt er nicht in Subdirectories, mit -xdev bleibt er im eigenen Filesystem (es gibt eine SystemV und eine BSD Version, wenn es nicht klappt in die man-Page schauen).

Ausgabe von find an andere Kommandos weitergeben

Man kann die Files oder Verzeichnisse, die der find findet, direkt an andere Kommandos weitergeben. Dazu dient eine Option -exec. Man kann alle Unix-Befehle benutzen, statt des File-Namens setzt man zwei geschweifte Klammen als Platzhalter {}. Das Kommando muß man in jedem Fall mit \; oder ';' abschließen. Dazu ein paar Beispiele:

 find /applications -type d -exec ls -l {} \; #Macht ls auf die gefundenen Verzeichnise
 find . -name "*.c" -exec chmod o+r {} \;     #Gibt den "Anderen" Leserechte für diese Files
 find / -name core -ctime +4 -exec /bin/rm {} \; #Löscht alle gefundenen Files
 find . -type f -exec grep -li /bin/ksh {} \; #Der grep gibt hier nur Filenamen zurück
Mit xargs kann man größere Suchen beschleunigen, weil man dann direkt Pipes aufbauen kann (mit exec ruft man das Kommando für jedes gefundene File auf, mit xargs übergibt man ganze Blöcke von Namen). Das sieht dann so aus:
 find . -type f | xargs grep -li /bin/ksh

Und viele praktische Anwendungen..


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | SMTP | Tracing | GPS ]

Copyright 2001-2014 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )