Ronald: Dateien in ienem Verzeichnis durchsuchen

Mit welchem Script kann ich am einfachsten alle Dateien in einem Verzeichnis auf einem Rechener nach einem String durchsuchen? Die Dateien enthalten alle einen festen header mit Vermerken über Entstehungsdatum, Autor,...
Diese Daten sollen nach Dateinamen sortiert in einer Html-Datei ausgegeben werden.

Wie mache ich das am Besten???

  1. Mit welchem Script kann ich am einfachsten alle Dateien in einem Verzeichnis auf einem Rechener nach einem String durchsuchen? Die Dateien enthalten alle einen festen header mit Vermerken über Entstehungsdatum, Autor,...
    Diese Daten sollen nach Dateinamen sortiert in einer Html-Datei ausgegeben werden.
    Wie mache ich das am Besten???

    1. Verzeichnis mit "opendir" öffnen
    2. Schleife:
    2.1. Einträge mit "readdir" lesen
    2.2. Prüfen, ob Datei oder Verzeichnis
    2.3. Falls Datei: mit Open öffnen
    2.4. Schleife:
    2.4.1. Zeilenweise lesen, mit regular expression vergleichen
    2.4.2. ggf. Treffer speichern oder direkt ausgeben.

    Du solltest erst mal bloß ASCII ausgeben, die HTML-Formatierung baust Du am besten zuletzt rein.

    1. Hi,

      1. Verzeichnis mit "opendir" öffnen
      2. Schleife:
        2.1. Einträge mit "readdir" lesen
        2.2. Prüfen, ob Datei oder Verzeichnis

      nö :-)

      1. use File::Find;
      2. - 2.2 siehe perldoc File/Find

      2.3. Falls Datei: mit Open öffnen
      2.4. Schleife:
      2.4.1. Zeilenweise lesen, mit regular expression vergleichen
      2.4.2. ggf. Treffer speichern oder direkt ausgeben.

      Du solltest erst mal bloß ASCII ausgeben, die HTML-Formatierung baust Du am besten zuletzt rein.

      Der Rest stimmt voll und ganz, inklusive dem Schlußsatz ;-)

      Natürlich kannst Du auch mit (openreadclose)dir arbeiten, aber mit File::Find ist es einfacher. Ganz besonders wenn Du rekursiv die Unterverzeichnisse durchgehen willst.

      Cheatah

      1. Der Rest stimmt voll und ganz, inklusive dem Schlußsatz ;-)

        :-)))

        Natürlich kannst Du auch mit (openreadclose)dir arbeiten, aber mit File::Find ist es einfacher. Ganz besonders wenn Du rekursiv die Unterverzeichnisse durchgehen willst.

        Tja, das ist mein "angeborenes" Mißtrauen gegenüber den Modulen (ist File::Find in *jeder* Perl-Auslieferung dabei, nicht nur in Super-Duper-ActivePerl5005?).

        Außerdem habe ich das alles in meinem SiteMapper schon so drin, und was ist so schwierig an Rekursion? Ein Informatiker liebt es, Probleme auf Teilprobleme zurückzuführen ... ;-)

        1. Hi,

          Natürlich kannst Du auch mit (openreadclose)dir arbeiten, aber mit File::Find ist es einfacher. Ganz besonders wenn Du rekursiv die Unterverzeichnisse durchgehen willst.

          Tja, das ist mein "angeborenes" Mißtrauen gegenüber den Modulen (ist File::Find in *jeder* Perl-Auslieferung dabei, nicht nur in Super-Duper-ActivePerl5005?).

          ich brauchte auch ein Weilchen, um von Modulen überzeugt zu werden. Sie können einem das Leben aber um einiges vereinfachen! Und natürlich ist es nicht in _jeder_ Perl-Version dabei, ich schätze z.B., daß man in Perl 4 davon noch nicht mal träumte :-) In Perl 5.005 steht zu File::Find jedenfalls nichts in der perldelta, also war es schon vorher vorhanden. Aber selbst wenn nicht - Module sind dazu da, installiert zu werden.

          Außerdem habe ich das alles in meinem SiteMapper schon so drin, und was ist so schwierig an Rekursion? Ein Informatiker liebt es, Probleme auf Teilprobleme zurückzuführen ... ;-)

          Richtig. Führe Dein Problem doch einfach auf das in File::Find gelöste zurück... ;-)

          Cheatah

  2. Hi!

    Noch ne Moeglichkeit, falls Du unter einem richtigen Betriebssystem arbeitest:
    $output = grep 'Suchmuster' \*.html;

    $output sieht ungefaehr so aus (koennte sich von System zu System leicht unterscheiden):

    datei1.html:Zeile die das Suchmuster enthaelt
    datei1.html:Andere Zeile mit dem Suchmuster
    datei2.html:Andere Datei, die das Suchmuster ebenfalls enthaelt
    readme.html:Ausgegeben werden aber immer nur genau die Zeilen mit dem Suchmuster

    Unter DOS/Windows gibt es das find-Kommando, das aehnliches leistet. Muesstest Du aber mal probieren, wie das genau funzt (find /?).

    Calocybe