orm@doc-tcpip.org | Erstellt: März 1999 - Letzte Modifikation: März 2014 |
Das find-Kommando stellt eine Syntax mit einer ganzen Reihe von Keywörtern zur Verfügung, die Eigenschaften beschreiben, nach denen man suchen kann:
Interval ist dabei eine Zahl, die die Anzahl der Tage zeigt, die betrachtet werden soll (0 ist heute, 2 ist "vor zwei Tagen" etc.) Mit einem Plus davor bedeutet es "älter als". Mit einem Minus davor bedeutet es "jünger als".
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).
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ückMit 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
find /etc /usr/bin /usr/sys -name mein_file
find /usr -type d (f für File und l für Link).Das gibt eine Liste mit allen Verzeichnissen unter /usr.
find / -atime 0 -print ==> Alle Files, die in den letzten 24 Stunden angefasst wurden. find / -mtime -5 -name cv_sd* find / -mtime -5 -name "cv_sd*" ==> Alle Files, die mit cv_sd beginnen und jünger als 5 Tage sind. (Mit -mtime 5 würde ich Files finden, die älter als 5 Tage sind..). find / -perm 2000 -a -mtime 0 ==> Alle Files mit gesetztem Sticky Bit, die in den letzten 24 Stunden angefasst wurden.
find / -type f -size +30000k find / -type f -size +30000k -exec ls -l {} \; | awk '{ print $9 ": " $5 }'
find / -user seppel -name *.sh
find . -type f -name "mein_file" -exec rm -f {} \;
Alle Files wo User- und Group-SUID gesetzt ist: find / -type f -perm -6000 -exec ls -l {} \; Alle Files, wo sowohl User- und Group ID SUID sind, sowie alle Files, wo entweder User oder Group ID SUID ist: find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL