Marcel: Dateien suchen und kopieren

Hallo zusammen!

Habe folgendes Problem. Ich habe mehrere Ordner ineinander verschachtelt. in diesen Ordnern sind viele Dateien. Ich würde gerne aus diesen Ordner bestimmte Dateien (z.B. *.doc) herauskopieren.
D.h. erst danach suchen lassen und dann in einen seperaten Ordner kopieren.
Weiß jemand wie das geht und ob das überhaupt mit Perl machbar ist?
Das ganze muss unter DOS laufen. => nicht DOS-Box unter XP oder ähnlichem.

Vielen Dank im Voraus

Marcel

  1. Weiß jemand wie das geht und ob das überhaupt mit Perl machbar ist?

    Klar geht das.

    1.) Verzeichnis einlesen (siehe opendir, readdir)
    2.) Bei jeder gefundenen Datei schauen, obs eine ist, die du suchst, z.B.

    if ($filename =~ /.doc$/i) {
       #Word-Dokument
    }

    3.) Die entsprechende Datei kopieren, entweder quick and dirty mit einem system("xcopy....")-Aufruf oder durch Neu-Erfindung des Rades
    (Gefundene Datei öffnen, binmode anschalten, lesen, in Zieldatei mit binmode schreiben usw.)
    Gruesse,
    Joerg

    1. Danke für die schnelle Hilfe!
      Ich habe aber trotzdem noch ein Problem.
      Wenn ich mir mit "opendir" den Inhalt eines Verzeichnisses angeben lasse, funktioniert alles, aber in diesem Ordner sind ja auch noch Unterordner, diese muss "er" ja irgendwie auch durchsuchen. Es sind wirklich viele Unterordner und alle manuel angeben ist ein wenig umständlich.

      MfG
      Marcel

      1. Hallo,

        Danke für die schnelle Hilfe!
        Ich habe aber trotzdem noch ein Problem.
        Wenn ich mir mit "opendir" den Inhalt eines Verzeichnisses angeben lasse, funktioniert alles, aber in diesem Ordner sind ja auch noch Unterordner, diese muss "er" ja irgendwie auch durchsuchen. Es sind wirklich viele Unterordner und alle manuel angeben ist ein wenig umständlich.

        für jede Datei kannst Du auch prüfen, ob es ein Verzeichnis ist:
        if(-d $filename)
           {
           # das ist ein Verzeichnis und verlangt entsprechende behandlung
           }

        wenn du dein Script so aufbaust, dass eine Funktion das Durchsuchen eines gegebenen Verzeichnisses übernimmt, kannst Du diese Funktion auch rekursiv aufrufen.
        Beachte aber, dass die beiden Dateien . und .. auch Verzeichnisse sind. Diese solltest du am besten gleich von anfang an ignorieren.

        Grüße
          Klaus

        1. Hallo Klaus!

          Das funktioniert sehr gut, danke nochmal.

          Kannst du mir sagen, wie ich z.B. ein Rückgabewert eines DOS-Befehls in Perl einlese?
          Z.B.:

          ich gebe in der Konsole "cd" ein. Dann erscheint der aktuelle Pfad. Diese Rückgabe würde ich gerne einlesen.

          Gruß
          Marcel

          1. Das funktioniert sehr gut, danke nochmal.

            Ich würde eher File::Find benutzen, das Modul ist genau für sowas entwickelt worden.

            ich gebe in der Konsole "cd" ein. Dann erscheint der aktuelle Pfad. Diese Rückgabe würde ich gerne einlesen.

            Der Befehl chdir existiert auch in Perl

            Struppi.