alligator: Verzeichniss abgleichen

Hallo zusammen,

ich hab da mal ne kleine Frage ...
Und zwar will ich regelmäßig mein Verzeichnis c:\hund
mit d:\save\hund abgleichen. Also das ich im Endeffekt einen Spiegel
nach der Abgleichung habe.
Nun überlege ich mir, wie ich das am besten anpacken sollte.
Möglichkeit 1:
Ich vergleiche jeweils die Dateien von c:\hund mit d:\save\hund und kopiere nur die neuen und veränderten Dateien (aber was heisst verändert - anderes Datum/andere Größe ?!?) rüber und lösche die,
die nicht mehr existieren.
Möglichkeit 2:
Ich lösche einfach d:\save\hund und schiebe dann alles von c:\hund rüber.

Frage 1:
Welche Möglichkeit wäre eurer Ansicht nach besser und warum (z.B. schneller,sicherer, sauberer ... )?
Oder gibt es andere noch bessere Möglichkeiten für das Problem.

Frage 2:
Wie das progammiertechnisch realisieren soll, hab ich noch keine wirklichen Ideen. Bei der Problematik ahne ich schlimmes
--> Rekursion. Hab damit noch nie was gemacht.
Würd mich da natürlich über Tipps/Links/sonstige Hilfen freuen !

Danke
Gruß
alligator

  1. Hallo,

    Wenn du mit Windows arbeitest und es nur bei dir am PC funktionieren soll, gibt es da Aktenkoffer (Müssen eventuell erst installiert werden). Diese tun das, was du wolltest nach kurzem einrichten automatisch.

    Grüße aus Düsseldorf,

    Aleksej

    1. Hallo,

      Wenn du mit Windows arbeitest und es nur bei dir am PC funktionieren soll, gibt es da Aktenkoffer (Müssen eventuell erst installiert werden). Diese tun das, was du wolltest nach kurzem einrichten automatisch.

      Eine entsprechende Anwendung von xcopy könnte so etwas unter Windows auch erledigen;-)

      Wenn ich Perl einsetze will, dann würde ich mich mit dem Modul File::Repl http://search.cpan.org/author/DROBERTS/File-Repl-1.20/ beschäftigen;-)

      Grüße
        Klaus

      1. Hi,

        Eine entsprechende Anwendung von xcopy könnte so etwas unter Windows auch erledigen;-)

        Löscht Xcopy auch die nicht mehr vorhanden Dateien ?

        Wenn ich Perl einsetze will, dann würde ich mich mit dem Modul File::Repl http://search.cpan.org/author/DROBERTS/File-Repl-1.20/ beschäftigen;-)

        Wenn ich das File aber später mit perl2exe kompilieren will, ist das
        arbeiten mit Module dennoch möglich ?

        cya
        alligator

        1. Hallo,

          Löscht Xcopy auch die nicht mehr vorhanden Dateien ?

          afaik nein.

          Wenn ich das File aber später mit perl2exe kompilieren will, ist das
          arbeiten mit Module dennoch möglich ?

          ich kenne perl2exe nicht wirklich, aber ich denke schon. Ein Blick in die Dokumentation von perl2exe sollte Klarheit schaffen.

          Grüße
            Klaus

  2. Hallo alligator,

    Wie das progammiertechnisch realisieren soll, hab ich noch keine wirklichen Ideen. Bei der Problematik ahne ich schlimmes
    --> Rekursion. Hab damit noch nie was gemacht.

    so schwierig ist Rekursion aber auch nicht. Das folgende Perl-Programm setzt Deine Möglichkeit 2 um:

    #!/usr/local/bin/perl -w
    use strict;

    sub loeschen{
      my $folder=shift;
      opendir(FOLDER,"$folder");
      for(readdir(FOLDER)){
        next unless(/\w/);
        if(-f "$folder/$_"){
          unlink("$folder/$_")||next();
        }
        elsif(-d "$folder/$_"){
          loeschen("$folder/$_")||next();
        }
      }
      rmdir("$folder");
    }

    sub kopieren{
      my($original,$kopie)=@_;
      mkdir($kopie)||die("Kann Ordner $kopie nicht erstellen: $!");
      opendir(FOLDER,"$original");
      for(readdir(FOLDER)){
        next unless(/\w/);
        if(-f "$original/$_"){
          open(ORIGINAL,"<$original/$_")||die("Kann $original/$_ nicht lesen: $!");
          open(KOPIE,">$kopie/$_")||die("Kann $kopie/$_ nicht schreiben: $!");
          if(/.(jpg|gif|exe)$/){ # gegebenenfalls zu erweitern!
            binmode(ORIGINAL);
            binmode(KOPIE);
          }
          print KOPIE <ORIGINAL>;
          close(KOPIE);
          close(ORIGINAL);
        }
        elsif(-d "$original/$_"){
          kopieren("$original/$_","$kopie/$_");
        }
      }
    }

    loeschen('d:/save/hund');
    kopieren('c:/hund','d:/save/hund');

    Nicht schön, aber bei mir klappt's.

    Gruß, Christoph