Dieser Beitrag stammt von Linuxfocus


 

Guido Socher
Über den Author
Guido ist ein Linux-Fan, weil es ein freies Betriebssystem ist und es einfach Spaß macht, mit Leuten der Linux Gemeinde aus aller Welt zusammenzuarbeiten. Seine Freizeit verbringt er mit seiner Freundin, hört BBC World Service Radio, macht Fahrradtouren und arbeitet mit Linux.

E-Mail an den Author 

Inhalt:
Suche nach Dateinamen
Übersicht über die Dateistruktur
Suche einer Datei nach Inhalt

Suchen nach Dateien

Zusammenfassung: Dieser Artikel zeigt, wie man unter Linux nach Dateien mit gewünschtem Inhalt oder Namen sucht.


Worst seen with Explorer. Try Netscape instead. 

Suche einer Datei über ihren Namen

Sicher hattest Du dieses Problem auch schon: Du hattest irgendwo eine Datei abgelegt, aber vergessen wo sie ist.

Hier kann der Befehl "find" helfen. Wie benutzt man ihn? find hat natürlich eine sehr lange man-page, aber hier sollen einfach ein paar "normale" Anwendungsfälle gezeigt werden. Mit dem folgenden Befehl kann man die Verzeichnisstruktur ausgehend von dem augenblicklichen Verzeichnis nach der Datei lostfile.txt durchsuchen:

find . -name lostfile.txt -print 

find versteht auch Wildcards (Platzhalter). Diese sollten jedoch in Anführungsstriche gesetzt werden, da sonst die Shell versucht, die Wildcards zu interpretieren und find diese Wildcards gar nicht sieht.

find . -name "lost*" -print 

Find ist recht langsam, wenn man eine sehr tiefe Verzeichnisstruktur durchsuchen möchte. In diesem Fall kann der Befehl locate hilfreich sein. locate sucht nicht direkt im Dateisystem sondern durchsucht eine Datenbank. Das Durchsuchen der Datenbank ist sehr viel schneller, dafür besteht die Gefahr, daß diese nicht ganz aktuell ist. In einigen Linux-Distributionen wird die locate Datenbank jede Nacht per cron-job neu gebaut. Falls der Rechner nicht die ganze Zeit läuft oder es keinen entsprechenden cron-job gibt, kann man die Datenbank auch mit dem Befehl updatedb von Zeit zu Zeit wieder aktualisieren. locate sucht nach Teil-Strings:

locate lostfile 

Dieser Befehl würde also Dateien wie lostfile.txt oder mylostfile.txt u.s.w. ... finden

Bis jetzt haben wir nach Dateien gesucht, bei denen wir den Namen recht gnau kannten. Vielleicht war der Name der Datei aber nicht lostfile.txt, sondern lastfile.txt oder leastfile.txt oder lostfiles.txt oder Lotsfile.txt oder lostfile.text. Wir wissen es einfach nicht genau. Wie kann man die Datei trotzdem finden? ftff (fault tolerant file find) ist ein Fehler tolerantes Suchprogramm. ftff sucht nach Dateinamen und erlaubt dabei einige Schreibfehler. Der folgende Befehl würde all die oben genannten Dateien finden:

ftff lostfiles.txt 

Die Anzahl der maximal erlaubten Fehler hängt von der Länge der Datei ab, kann aber auch mit der Option -t eingestellt werden. Der folgende Befehl erlaubt maximal 2 Schreibfehler und benutzt auch ein Wildcard-Zeichen:

ftff -t2 "lostfiles*"
   

Ftff ist ein Programm, das ich selbst geschrieben habe und ist Teil eines Programmpaketes namens whichman-1.5. Man kann sich whichman-1.5 von sunsite herunterladen. sunsite.unc.edu/pub/Linux/apps/doctools/whichman-1.5.tar.gz

Manchmal möchte man nach allen Dateien suchen, die eine bestimmte Zeichenfolge nicht enthalten. Z.B. alle Dateien, die kein .o oder .c enthalten. Hier sind einige Möglichkeiten:

  find . ! -name "*.o" ! -name "*.c" -print 
   
  find . -print | fgrep -v '.o' | fgrep -v '.c'
   

oder wenn man die GNU Version von find hat:

  find | fgrep -v '.o' | fgrep -v '.c'    
  find | egrep -v '\.[oc]' 
   

Übersicht über die Dateistruktur bekommen

Wenn man z.B eine neue CD hat, möchte man vielleicht einen Überblick über diese CD und ihren Inhalt bekommen. Man kann hierfür natürlich einfach den Befehl "ls -R" benutzen, ich persönlich bevorzuge jedoch aus Lesbarkeitgründen eine der folgenden Möglichkeiten.

tree ( sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz) zeichnet eine Baum-Struktur:

tree 

oder mit langen Dateinamen:

  tree -fF
  

Man kann auch den schon bekannten find Befehl benutzen:

find . -ls 
find . -print  oder mit der GNU Version von find:   
find 
  find . -printf "%7s %p\n"
  

Es gibt auch ein kleines Perl-Programm namens lsperl, das die Ausgabe des ls Befehls neu formatiert. Es kann hier als lsperl.gz heruntergeladen werden.

Es gibt sicherlich noch viel mehr Programme, mit denen man sich ein Dateisystem übersichtlich darstellen kann, aber für den Anfang soll das erst mal ausreichen.

Suche einer Datei mit bestimmtem Inhalt

Eines der Standardwerkzeuge, um Dateien nach ihrem Inhalt zu durchsuchen, ist egrep/grep. egrep/grep erwartet Reguläre Ausdrücke. fgrep kann benutzt werden, um einfach nach Zeichenfolgen zu suchen (keine Regulären Ausdrücke). Der folgende Befehl durchsucht z.B alle Dateien im augenblicklichen Verzeichnis.

  egrep -i "search expression"  *
   

Um die Suche auch auf Dateien im darunterliegenden Verzeichnisbaum auszudehnen, kann man egrep einfach mit einem Dateisuchbefehl (siehe oben) verbinden. Hier einige Möglichkeiten:

 egrep -i "expression" `find . -type f -print`
  
  find . -type f -exec egrep -i "expression" /dev/null {} \;
   
  find . -type f -print | xargs  egrep -i "expression"
   

Falls das etwas schwer zu merken ist, kann man auch folgendes Shell Skript namens grepfind benutzen ( grepfind.gz). Das Shell Skript stellt auch sicher, daß Sonderzeichen entfernt werden, wenn man versehentlich eine Binär-Datei durchsucht.

Ein sehr interessantes Programm ist agrep. Es arbeitet im Prinzip wie egrep, kann aber fehlertolerant suchen. Auf diese Art kann man auch nach leicht falsch geschriebenen Zeichenfolgen suchen. Um nach einem bestimmten Ausdruck zu suchen und dabei maximal 2 Schreibfehler zuzulassen, benutzt man:

  agrep -i -2 "search expression" *
   

agrep gibt es auf sunsite. sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z. agrep kommt ursprünglich von ftp://ftp.cs.arizona.edu/agrep/

glimpse ist ein sehr mächtiges Suchprogramm. Es benutzt ein Konzept, das ähnlich zu locate ist. Zuerst muß eine Datenbank gebaut werden, aber dann ist die Suche sehr schnell. Um solch eine Datenbank für alle Dateien im augenblicklichen Verzeichnis und seinen Unterverzeichnissen zu bauen, benutzt man:

glimpseindex . 

Jetzt kann man die vorher in die Datenbank aufgenommenen Dateien durchsuchen.

  glimpse -i -2 "search expression"
   

glimpse ist auch fehlertolerant (wie agrep), und die Option -2 erlaubt maximal 2 Fehler. glimpse gibt es unter http://glimpse.cs.arizona.edu/


Es gibt sehr viele Suchprogramme für Unix und Linux im besonderen. Dieser Artikel kann daher auf keinen Fall komplett sein. Wenn Du mehr über Datei-Utilities lernen möchtest, dann lies einfach mal in den .lsm Dateien unter http://sunsite.unc.edu/pub/Linux/utils.

Viel Spaß und fröhliches Suchen.

Webpages maintained by Miguel Ángel Sepúlveda 
© Guido Socher 1998 
LinuxFocus 1998