Universität Ulm - Abteilung Angewandte Informationsverarbeitung
11. Übungsblatt zur Vorlesung Allgemeine Informatik III
Abgabetermin: Dienstag, 27.01.2004
Find (10 Punkte)
Ein häufig gebrauchtes Kommando unter Unix, mit dem ganze Datenbäume nach
Dateien, die vorgegebenen Kriterien entsprechen (Optionen), durchsucht werden
können, ist find.
Implementieren Sie eine vereinfachte Version von find, welche die im
Folgenden aufgelisteten Optionen verarbeiten kann. Die Optionen sollen dabei
beliebig kombinierbar sein. Bei nicht definierten Optionen bzw. falsch
angegbenen Optionsparametern (z.B. String statt Zahl oder umgekehrt) soll
eine Usage-Meldung sowie eine Fehlermeldung ausgegeben werden. Die Suche
soll rekursiv im angegebenen Verzeichnis stattfinden. Wird kein Verzeichnis
angegeben wird im aktuellen Verzeichnis rekursiv gesucht. Wird kein Parameter
angegeben, werden alle Dateien ausgegeben. Werden keine Dateien gefunden,
wird nichts ausgegeben.
a)
find -i inodenr verzeichnis
(2 Punkte)
Sucht nach allen Dateinamen, die die Datei mit der angegebenen
Inodenummer referenzieren.
b)
find -n dateiname verzeichnis
(2 Punkte)
Sucht nach allen Dateien mit dem angegebenen Dateinamen.
c)
find -a datei verzeichnis
(2 Punkte)
Sucht nach allen Dateien, deren Zugriffszeit (Access Time) neuer ist, als
die der angegebenen Datei.
d)
find -r verzeichnis bzw. find -w verzeichnis bzw.
find -x verzeichnis
(2 Punkte)
Gibt alle Dateien aus, bei denen der User das angegebene Recht
(read, write, execute) besitzt.
e)
find -l verzeichnis
(2 Punkte)
Die Option -l soll bewirken, dass Softlinks so behandelt werden, wie die
Datei, auf die sie zeigen (Erklären Sie Ihrem Tutor dabei den Unterschied
zwischen stat und lstat).
Die Aufgaben sollen ohne Verwendung der Bibliothek getopt gelöst werden!
Hinweise zu den Optionen:
- Jede Option besteht aus genau einem Zeichen.
- Jede Option besitzt entweder einen oder keinen Parameter.
- Der Parameter kann direkt nach der Option (ohne Leerzeichen) oder
nach der Option getrennt durch ein Leerzeichen folgen.
- Optionen können zu Optionsgruppen zusammengefaßt werden, wobei nur die
letzte Option einen Parameter besitzen darf.
- Die Reihenfolge der Optionen spielt keine Reihe.
- Bei mehreren Optionen werden die Bedingungen durch logisches Und
miteinander verknüpft.
- Ein Doppelminuszeichen kündigt an, daß keine weiteren Optionen mehr
folgen. Achtung: Wird ein Doppelminuszeichen als Parameter angegeben, gilt
diese Regelung nicht, da Parameter einfach eingelesen und nicht geparst
werden.
- Merke: Die Verzeichnisse werden jeweils rekursiv durchlaufen (d.h.
auch alle Unterverzeichnisse werden durchsucht).
Beispiele:
- find: Gibt alle Dateien des aktuellen Verzeichnisses aus.
- find -x: Sucht im aktuellen Verzeichnis nach allen ausführbaren
Dateien.
- find -n readme /usr: Sucht im Verzeichnis /usr nach der Datei
readme.
- find -nreadme /usr: Sucht auch im Verzeichnis /usr nach der Datei
readme.
- find -rwx: Sucht im aktuellen Verzeichnis nach allen Dateien, die der
Benutzer lesen, schreiben und ausführen darf (Optionsgruppe).
- find -rwxa readme.old: Sucht im aktuellen Verzeichnis nach allen
Dateien, die der Benutzer lesen, schreiben und ausführen darf und deren
Zugriffszeit aktueller ist, als die der Datei readme.old.
- find -wxra readme.old: Die Reihenfolge der Optionen spielt
keine Rolle, außer daß die Option mit Parameter am Schluß der Gruppe
stehen muß.
- find -n readme.txt -- -myhome/temp: Sucht im aktuellen
Verzeichnispfad im Verzeichnis -myhome/temp nach der Datei
readme.txt (Ohne das Doppelminuszeichen würde, da die Option
-m nicht definiert ist, eine Fehlermeldung ausgegeben werden).
- find -n -hallo: Sucht im aktuellen Verzeichnis nach
der Datei -hallo (Hier greift das Doppelminus nicht, da es
als Parameter der Option -n nicht geparst wird).
- find -n readme -wa readme.old /usr: Sucht nach allen
schreibbaren readme-Dateien im Verzeichnis /usr, die eine
neuere Zugriffszeit wie die Datei readme.old besitzen (Die Option
-w bezieht sich auf das Suchergebnis und nicht auf die Datei
readme.old)!
Viel Erfolg!
Hans Braxmeier