Shells: Tutorial


* Einführung * Installation * Paketmanager * Grundlagen * Shells * Entwicklung * KDE * Skriptsprachen * AWK * PHP * Perl * Apache * Veranstaltungen * Schulungen * Bücher * Netzwerk * OpenOffice * OpenSource * Samba

Shells


© <a href="http://www.fotolia.de/p/29003">Ljupco Smokovski</a> - FOTOLIA
Home
Erste Schritte mit der Bourne-Shell
Dateien zeilenweise zusammenfügen
Head or Tail
Schleifen und Zählen
Shell-Variablen
Pipes
Sortieren von Daten
Wer sucht der findet!
Praktische Shell-Skripte
Rechtschreibung
Schleifen und elegant Zählen
Texte formatieren mit fmt und fold
Umlenkung der Ein- und der Ausgaben
Klammer-Erweiterung
Verknüpfen von Textdateien mittels Schlüsselfeldern
Mit freundlicher Unterstützung von:

Linux-Kurse und Seminare Linux Kurse
Veranstalter des
Linux-Tag
am Bodensee
2007 und 2008

Kontakt
Haftung
Impressum
Problem Hilfe Startseite


Vergebliche Suche, © <a href="http://www.fotolia.de/p/88138">David Gilder</a> -Wer sucht der findet!

Obwohl der find-Befehl wohl einer der mächtigsten und nützlichsten Befehle in Linux (und Unix) ist, wird er leider allzu häufig von Anfänger wegen seiner vermeintlichen Komplexität gemieden. Nach den Erklärungen und Beispielen dieser Seite wird hoffentlich jedem Anfänger klar sein, dass das Arbeiten mit find keine Hexenkunst ist.

Die allgemeine Syntax lautet:
  find path operators

mit path ist der Pfad oder das Verzeichnis gemeint, in dem die Suche beginnen soll. Mit Hilfe der Operatoren (operators oder besser Optionen) definiert man, was man eigentlich sucht und was mit den gefundenen Dateien gemacht werden soll.

Suche nach Dateien

Am besten schauen wir uns die Arbeitsweise von find einmal an einem einfachen Beispiel an:

find /home/peter -name "brief.txt" -print

Obiger Befehl bewirkt, wenn man ihn auf einer Shell abschickt, dass ab dem Verzeichnis /home/peter nach der Datei "brief.txt" gesucht wird und das Ergebnis über stdout ausgedruckt wird. Die Suche geht auch rekursiv in alle Unterverzeichnisse ab der Startposition.

Suche nach Benutzern oder Benutzergruppen

Statt nach einem bestimmten Dateinamen, kann man sich auch alle Dateien eines bestimmten Benutzers ab einer bestimmten Startposition suchen lassen. Im nächsten Beispiel sucht unser hypothetischer User "peter" nach Dateien seiner Frau "Helge", die sich innerhalb seines Homeverzeichnisses befinden:

find /home/peter -user helge -print

Ebenso funktioniert auch die Suche nach einer Benutzergruppe. Im nächsten Beispiel nach der Gruppe "team":

find /home  -group team -print

Suchen mit Wildcards

Bei der Suche kann man auch Wildcards benutzen, so findet man z.B. mit folgendem Aufruf alle Dateien in denen der String Brief vorkommt:

find /home/peter -name "*brief*" -print

Obiger Aufruf würde zum Beispiel folgende Dateien finden:
brief1.txt
brief_an_helgt.tex
neuer_brief_peter.txt

Verknüpfung von Suchkriterien


Mit Hilfe des Operators -o kann man auch verschiedenen Suchkriterien mit "oder" verknüpfen:

find /home/peter -name "*.txt" -o -name "*.tex" -print

Obiger Befehl findet also alle Dateien, die die Endung txt oder tex haben.

Mit -a werden Kriterien "und" verknüpft.

Suchen nach Entstehungs- oder letzter  Zugriffszeit

Nehmen wir an, dass wir im aktuellen Verzeichnis alle Dateien finden wollen, die vor genau drei Tagen erzeugt worden sind.

find . -mtime 3 -print

Prinzipiell macht dies obiges Kommando, aber darin ist eine Falle versteckt, auf die die wenigsten Bücher aufmerksam machen. Tage heißt in diesem Falle nicht Kalendertage, sondern 24-Stunden Intervalle ab der aktuellen Uhrzeit. Nehmen wir an, dass wir gerade 18.20 Uhr an einem 15. eines Monats haben. Dann bewirkt obiger Aufruf, dass alle Dateien gefunden werden, die zwischen 18.20 Uhr am 11. und 18.20 am 12. erzeugt worden sind.

Analog dazu funktioniert -atime, nur dass dabei alle Dateien gefunden, auf die innerhalb des entsprechenden Zeitraums zugegriffen worden ist.

Eine andere Aufgabe: Stellen wir uns vor, dass wir aus einem Verzeichnis "books" alle Dateien, die innerhalb der letzten 24 Stunden geändert wurden, mittels tar archivieren wollen bzw. müssen:

tar cvjf new.tbz2 `find books -mtime 0 -a -type f`

Im obigen Befehl dient die Option "-type f" dazu, dass nur Dateinamen ausgegeben werden.

Nun wollen wir alle Dateien mit den Endungen  cpp und h  finden, die wir innerhalb der letzten 24 Stunden geändert haben:

find -mtime 0 -a \( -name "*.cpp" -o -name "*.h" \)

Suchen und Ausführen von Kommandos

So zum Schluss dieser Abhandlung - find kann natürlich weitaus mehr - noch der exec-Operator. Mit Exec kann man alle Linux- bzw. Unix Shell-Befehle auf die gefundenen Dateien anwenden:

find /home/peter -name "*.o" -o -name "*.log" -exec rm  {} \;

Der obige Befehl findet alle Dateien mit der Endung o und alle mit der Endung .log. Anschließend werden diese gelöscht. {} ist ein Platzhalter für die gefundenen Filenamen. Achtung: Der Befehl exec muss mit "\;" beendet werden. Dies zu vergessen ist ein beliebter Anfängerfehler!
© Copyright 2007 - 2010, Bernd Klein mit freundlicher Unterstützung von Bodenseo, Linux-Kurse und Schulungen,
Foto linke Seite (Mann mit Strick und Colt): Foto: © Ljupco Smokovski, fotolia 984022