Tom: Datenrücksicherung, Nur Datum wiederherstellen

Hello,

der heutige Tag wird mal wieder den Problemen gewidmet, die ich nicht hätte, wenn es keine IT gäbe...
Also Kampf gegen Windmühlen usw.

Vorgeschichte:
Vom PC (WinXP) [A] auf das Notebook (Linux) [C] habe ich seinerzeit meine Daten kopiert. Dann fiel der PC auch tatsächlich aus und ich musste mit dem Notebook weiterarbeiten. Beim Zurücksichern ist mir dann entgangen, dass FileZilla leider auf dem Notebook die Dateidaten nicht beibehalten halte, sondern gegen das vom Tag der de Kopierens ersetzt hatte. Daraufhin waren also nun Original und Kopie bezüglich der Daten genauso kaputt.

Zwischwenspiel:
Paranoid, wie ich bin, habe ich ich aber noch eine Kopie [B] (nur etwa älter) mit den richtigen Daten.

Aufgabe:
Nun suche ich ein Programm, mit dessein Hilfe ich nur die Datei-Daten ("Datumse") von [B] nach [A] (und später auch auf [C]) wiederherstellen kann. Ich habe schon einige Programme durch.
Total Commander findet zwar die nach Inhalt gleichen Dateien, lässt dann aber kein Überschreiben zu. Es will vielmehr alle Verzeichnisse löschen. Nun weiß ich nicht, ob das der richtige Weg sein könnte. Ausweichplat habe ich auch nicht mehr. Es sind etliche Gigabytes.

Alternative:
Selber schreiben. Aber da müsste ich jetzt erstmal wieder fließig Programmierung unter Windows üben... Unter DOS wäre das Programm schon fertig gewesen *ohoh*

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hallo,

    Alternative:
    Selber schreiben. Aber da müsste ich jetzt erstmal wieder fließig Programmierung unter Windows üben... Unter DOS wäre das Programm schon fertig gewesen *ohoh*

    wo liegt das Problem? Windows schleppt doch bekanntlich das ganze DOS-API immer noch mit. Wenn du also eine Lösung für DOS/Kommandozeile hast, kannst du die mit minimalen Einschränkungen auch für Windows nutzen.

    Ciao,
     Martin

    --
    Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
      (Ashura)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hello,

      Alternative:
      Selber schreiben. Aber da müsste ich jetzt erstmal wieder fließig Programmierung unter Windows üben... Unter DOS wäre das Programm schon fertig gewesen *ohoh*

      wo liegt das Problem? Windows schleppt doch bekanntlich das ganze DOS-API immer noch mit. Wenn du also eine Lösung für DOS/Kommandozeile hast, kannst du die mit minimalen Einschränkungen auch für Windows nutzen.

      Nein, leider nicht. Lange Dateinamen werden nicht unterstützt und das führt dann zu einem irrsinnigen Aufwand bei der Kotrolle.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi,

        Wenn du also eine Lösung für DOS/Kommandozeile hast, kannst du die mit minimalen Einschränkungen auch für Windows nutzen.
        Nein, leider nicht. Lange Dateinamen werden nicht unterstützt und das führt dann zu einem irrsinnigen Aufwand bei der Kotrolle.

        MS DOS ab Version 7 sowie cmd.exe unter Windows 5+ unterstützen lange Dateinamen in ihren APIs (MS DOS 7 nur, wenn es in seiner VM unter Windows 98 läuft). Höchstens die Standardbibliotheken von DOS-Compilern könnten Probleme machen. Dann nutzt man die API-Funktionen eben direkt, d.h. unter Umgehung der Standardbibliothek. Das DOS-API ist/war simpel genug, dass dieser Weg ohne weiteres zumutbar ist, finde ich.

        Ciao,
         Martin

        --
        Eifersucht ist so alt wie die Menschheit: Als Adam einmal spät heimkam, zählte Eva sofort seine Rippen.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hello,

          MS DOS ab Version 7 sowie cmd.exe unter Windows 5+ unterstützen lange Dateinamen in ihren APIs (MS DOS 7 nur, wenn es in seiner VM unter Windows 98 läuft). Höchstens die Standardbibliotheken von DOS-Compilern könnten Probleme machen. Dann nutzt man die API-Funktionen eben direkt, d.h. unter Umgehung der Standardbibliothek. Das DOS-API ist/war simpel genug, dass dieser Weg ohne weiteres zumutbar ist, finde ich.

          Hab ich aber nicht und kann damit auch noch nicht laufen, bestenfalls krabbeln. Als ich das letzte Mal solche Sachen programmiert habe, haben die Interrupts des DOS-7-API (die es für die langen Dateinamen gibt), leider nicht das getan, was sie sollten. Oder mein System drum herum hat das unterbunden...

          http://toolsandmore.de/Central/Helpdesk/Ratgeber/Zum_Archiv/Alles_ueber_lange_Dateinamen/

          http://toolsandmore.de/Central/Helpdesk/Ratgeber/Zum_Archiv/Alles_ueber_lange_Dateinamen/_t1.htm

          usw.

          Ehrlich gesagt, habe ich auch vorerst keine Lust, das auszuprobieren, ob es jetzt unter XP funktioniert.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
  2. mahlzeit Tom,

    ich würde das mit Perl machen, hier die core-function:

    utime LIST
                Changes the access and modification times on each file of a list
                of files. The first two elements of the list must be the
                NUMERICAL access and modification times, in that order. Returns
                the number of files successfully changed. The inode change time
                of each file is set to the current time. This code has the same
                effect as the "touch" command if the files already exist:

    #!/usr/bin/perl
                    $now = time;
                    utime $now, $now, @ARGV;

    Habs grad eben mal getestet, geht ;)

    Die Liste bekommst Du mit File::Find, Du brauchst zwei Listen, Quelle und Ziel (Dateien). Mit dem Modul File::stat bekommst Du mtime und atime der Dateien aus der Ausgangsliste (Quelle). Und mit utime kannst Du das Dateidatum der Dateien in der Zielliste setzen.

    Schönen Sonntag,
    Horst Schneeschuh

    1. Hello R.,

      ich würde das mit Perl machen, hier die core-function:

      das ist ja lieb von Dir, aber ich muss erst die Liste der gleichnamigen Dateien erstellen, diese dann auf identischen Inhalt prüfen und die identischen dann wieder mit dem alten Datum versehen.

      Klar kann man das auch in Perl oder PHP o.ä. programmieren. Aber wie lange soll das laufen bei ca. 260.000 Verzeichnissen und über 3.000.000 Dateien?

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi Tom,

        ich würde das mit Perl machen, hier die core-function:

        das ist ja lieb von Dir, aber ich muss erst die Liste der gleichnamigen Dateien erstellen, diese dann auf identischen Inhalt prüfen und die identischen dann wieder mit dem alten Datum versehen.

        Genau. Die Identität kannst Du mit einer Checksumme feststellen.

        Klar kann man das auch in Perl oder PHP o.ä. programmieren. Aber wie lange soll das laufen bei ca. 260.000 Verzeichnissen und über 3.000.000 Dateien?

        Ohne Checksumme ne halbe Stunde, mit Checksumme 2..3 Stunden. Hängt ab vom Blech, Geschätzt ;)

        Was Zeit frisst, ist die Checksummenbildung, die muss über den Inhalt erfolgen.

        Horst Wurmstich

      2. Hi,

        Klar kann man das auch in Perl oder PHP o.ä. programmieren. Aber wie lange soll das laufen bei ca. 260.000 Verzeichnissen und über 3.000.000 Dateien?

        ist die Laufzeit für dich relevant? Was wäre schlimm daran, wenn der Vorgang zwei Tage dauert?

        Ciao,
         Martin

        --
        ... und der FDP-Wähler gibt seine Stimme der FDP.
           (Faszinierende Erkenntnis meines Gemeinschaftskunde-Lehrers, 9. Schuljahr)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hello,

          Klar kann man das auch in Perl oder PHP o.ä. programmieren. Aber wie lange soll das laufen bei ca. 260.000 Verzeichnissen und über 3.000.000 Dateien?

          ist die Laufzeit für dich relevant? Was wäre schlimm daran, wenn der Vorgang zwei Tage dauert?

          An erster Stelle die Unstabilität unseres Stromnetzes. Das ist im Winter immer mal von kleinen Unterbrechungen gezeichnet. Ob meine USV noch gut ist, weiß ich nicht. Die habe ich schon länger eingemottet.

          An zweiter Stelle, dass ich dann die ganze Zeit nicht mit den Rechnern arbeiten kann.

          Aber wenn es nichts fertiges gibt, werde mir dann wohl ein Tool in PHP erstellen, das ich in mehrere Batch-Jobs aufteilen kann. So kann dann wenigstens jede Teilaufgabe in einer überschaubaren Zeit ablaufen. C oder Pascal wären mir allerdings lieber.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
  3. Om nah hoo pez nyeetz, Tom!

    Paranoid, wie ich bin, habe ich ich aber noch eine Kopie [B] (nur etwa älter) mit den richtigen Daten.

    Ein Busfahrer beobachtet, wie ein Fahrgast regelmäßig zwei Fahrscheine entwertet und spricht ihn irgendwann darauf an.

    * Warum tun Sie das?
    * Es könnte sein, dass ich einen verliere und in eine Fahrscheinkontrolle komme.
    * Aber Sie könnten doch auch alle beide verlieren?
    * Für den Fall hab ich noch 'ne Monatskarte.

    Matthias

    --
    1/z ist kein Blatt Papier.

  4. Hallo,

    mit AutoIt sollte eine entsprechende Lösung schnell realisiert sein.

    Grüße Basti

  5. da müsste ich jetzt erstmal wieder fließig Programmierung üben...

    zwecklos.

    1. Hello,

      da müsste ich jetzt erstmal wieder fleißig Programmierung üben...

      zwecklos.

      zwecklos es Dir zu erklären, denn darin warst Du ja schon immer eine Flasche :-P

      Deine Ballerspiele habe ich dafür nie leiden können.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Deine Ballerspiele habe ich dafür nie leiden können.

        hab keine Ballerspiele. Du machst am Ballermann Urlaub und verwechselst da was.

  6. Hello,

    der Versuch, das mit PHP zu lösen, scheitert schon an den Vorübungen.

    Touch() scheint unter Windows nicht das zu machen, was im Manual beschrieben steht.

    #-------

    <?php   ### touch.php ###

    $_files['path'] = glob('*.*');

    echo "<pre>\r\n";
    echo htmlspecialchars(print_r($_files,1));
    echo "</pre>\r\n";

    foreach($_files['path'] as $key => $path)
    {
        $_files['date_c'][$key] = filectime($path);
    }

    echo "<pre>\r\n";
    echo htmlspecialchars(print_r($_files,1));
    echo "</pre>\r\n";

    foreach($_files['path'] as $key => $path)
    {
        $_files['date_m'][$key] = filemtime($path);
    }

    echo "<pre>\r\n";
    echo htmlspecialchars(print_r($_files,1));
    echo "</pre>\r\n";

    foreach($_files['path'] as $key => $path)
    {
        $_files['date_a'][$key] = fileatime($path);
    }

    echo "<pre>\r\n";
    echo htmlspecialchars(print_r($_files,1));
    echo "</pre>\r\n";

    clearstatcache();

    echo "<h1>touch</h1>\r\n";

    touch($_files['path'][2], $_files['date_c'][2] - 100, $_files['date_a'][2] - 100);

    foreach($_files['path'] as $key => $path)
    {
        $_files['date_c'][$key] = filectime($path);
        $_files['date_a'][$key] = fileatime($path);
        $_files['date_m'][$key] = filemtime($path);
    }

    echo "<pre>\r\n";
    echo htmlspecialchars(print_r($_files,1));
    echo "</pre>\r\n";

    ?>

    #-------

    Jedenfalls wird die C-Time nicht wunschgemäß verändert bei mir. Sie bleibt einfach gleich.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. [latex]Mae  govannen![/latex]

      der Versuch, das mit PHP zu lösen, scheitert schon an den Vorübungen.

      Touch() scheint unter Windows nicht das zu machen, was im Manual beschrieben steht.

      Die im Manual erwähnte Einschränkung trifft auf dein System nicht zu?

      Stur lächeln und winken, Männer!
      Kai

      --
      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
      in Richtung "Mess up the Web".(suit)
      SelfHTML-Forum-Stylesheet
      1. Hello,

        der Versuch, das mit PHP zu lösen, scheitert schon an den Vorübungen.

        Touch() scheint unter Windows nicht das zu machen, was im Manual beschrieben steht.

        Die im Manual erwähnte Einschränkung trifft auf dein System nicht zu?

        Welche meinst Du jetzt?
        Vermutlich komme ich um C oder Pascal für Windows nicht herum...

        Pascal wäre mir am liebsten, aber das System, das auf Win98 noch lief tuts auf WInXP leider nicht mehr

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de