Ted: Das muß doch auch einfacher gehen...

Hallo,

nachdem mich hier einige von Euch auf das Modul net::ftp gebracht hatten und ich mir das ganze näher betrachtet habe, habe ich ein script geschrieben, und siehe da, es klappt prima.

Um das Script zu vervollkommnen (:-)), mir aber nur begrenzter Speicherplatz zur Verfügung steht, möchte ich nun, daß der Speichervorgang zwar jeden Tag ausgeführt wird, aber immer nur maximal 5 Backup-Dateien zur Verfügung stehen.

Deshalb dachte ich, die einfachste Möglichkeit wäre, die Dateien, je nach Datum, einfach unterschiedliche Namen zu geben, aber was dabei herauskam, ist alles andere als ellegant:

Remote kriegt einen Namen, abhängig vom Datum

if ($day < 3) {
$remote_file = "$remote_dir/b_1.txt";
elsif ($day > 2 && $day < 6) {$remote_file = "$remote_dir/b_2.txt";}
elsif ($day > 6 && $day < 9) {$remote_file = "$remote_dir/b_3.txt";}
elsif ($day > 9 && $day < 12) {$remote_file = "$remote_dir/b_4.txt";}
elsif ($day > 12 && $day < 15) {$remote_file = "$remote_dir/b_5.txt";}
elsif ($day > 15 && $day < 18) {$remote_file = "$remote_dir/b_1.txt";}
elsif ($day > 18 && $day < 21) {$remote_file = "$remote_dir/b_2.txt";}
elsif ($day > 21 && $day < 24) {$remote_file = "$remote_dir/b_3.txt";}
elsif ($day > 24 && $day < 27) {$remote_file = "$remote_dir/b_4.txt";}
}
else
{$remote_file = "$remote_dir/b_5.txt";}

Außerdem habe ich so auch nicht die jeweils 5 neuesten, also wie hätte ich es besser machen können??

Danke für Eure Mühe

Ted

  1. $day ist natürlich definiert und ist der Tag des lfd. monats...

    Danke nochmal im Vorraus

    Ted

  2. Hallo Ted,

    als Lösungsansatz wie ich es versuchen würde.

    Erstens die Benennung nicht nach dem Tag des Monates, sondern nach der Unix-Zeit, nach den vergangenen Sekunden. Diese würde ich dann per Substring so kürzen, das ich brauchbares Format habe.
    Dann beim Programmablauf das Verzeichnis einlesen, in welchem sich die Daten befinden, und beim Einlesen dann vergleichen, ob die jetztige Systemzeit nicht um soviel Sekunden (5x24x60x60 plus ein zwei Stunden Karenz - bin zu faul zum rechnen) älter ist. Wenn nicht bleibt sie unberührt, wenn ja, mit unlink löschen.

    Jens

    1. Hallo Ted,

      als Lösungsansatz wie ich es versuchen würde.

      Erstens die Benennung nicht nach dem Tag des Monates, sondern nach der Unix-Zeit, nach den vergangenen Sekunden. Diese würde ich dann per Substring so kürzen, das ich brauchbares Format habe.
      Dann beim Programmablauf das Verzeichnis einlesen, in welchem sich die Daten befinden, und beim Einlesen dann vergleichen, ob die jetztige Systemzeit nicht um soviel Sekunden (5x24x60x60 plus ein zwei Stunden Karenz - bin zu faul zum rechnen) älter ist. Wenn nicht bleibt sie unberührt, wenn ja, mit unlink löschen.

      Jens

      Hi Jens,

      ist auf jeden Fall besser, als meine Lösung. Wäre nen Versuch wert, wenns:

      1. Nicht noch besser und eleganter geht.

      2. Ich genau weiß, wie das mit dem Einlesen geht (muß nochmal in die perldoc!).

      Danke erstmal

      Ted

  3. Hi,

    aber immer nur maximal 5 Backup-Dateien zur Verfügung stehen.

    offenbar brauchst Du im Namen der Version keine weiteren Informationen.

    Dann würde ich an Deiner Stelle mit relativen Versionsnummern arbeiten.
    Also in jedem Programmlauf

    • Version 4 nach 5 umbenennen (überschreibt Version 5),
    • Version 3 nach 4 umbenennen,
    • Version 2 nach 3 umbenennen,
    • Version 1 nach 2 umbenennen,
    • Version 1 neu erstellen.

    mfG - Michael

    1. Hi nochmal,

      offenbar brauchst Du im Namen der Version keine weiteren Informationen.

      gulp (wrap!=physical und Prüflesen von Eingaben im Poster-Skript, igitt):

      ich meinte: Du brauchst im *Dateinamen* offenbar keine anderen Informationen und kannst diesen also ausschließlich für die Versionsnummer verwenden.

      mfG - Michael

    2. Hi,

      aber immer nur maximal 5 Backup-Dateien zur Verfügung stehen.

      offenbar brauchst Du im Namen der Version keine weiteren Informationen.

      Dann würde ich an Deiner Stelle mit relativen Versionsnummern arbeiten.
      Also in jedem Programmlauf

      • Version 4 nach 5 umbenennen (überschreibt Version 5),
      • Version 3 nach 4 umbenennen,
      • Version 2 nach 3 umbenennen,
      • Version 1 nach 2 umbenennen,
      • Version 1 neu erstellen.

      mfG - Michael

      Hi Michael,

      erstmal danke für diese Lösung, die sehr viel eleganter ist, als meine.

      Aber ich nehm eine von Klaus Lösungen.

      Schönen Tag und vielen Dank für Deine Hilfe

      Ted

  4. Hallo,
    Da gibt eine Menge Möglichkeiten
    Hier so spontan alles, was mir so eingefallen ist:
    1.) Modulo-Rechnen:

    $remote_file = "$remote_dir/b_". ($day % 5) .".txt";

    Siehe: perldoc perlop
    2.) Wochentag heranziehen:

    $remote_file = "$remote_dir/b_". gmtime(time)->[6] .".txt";

    Siehe: perldoc -f gmtime

    Allerdings sind es dann sieben dateien :-(

    3.)SteuerArray:
    @Nummern = (1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1);

    Reihenfolge beliebig

    $remote_file = "$remote_dir/b_$Nummer[$day].txt";

    Zugegeben auch nicht besonders elegant.

    Naja, irgendwas wird wohl dabei sein.
    Und ausbaufähig ist jede Lösung ;-)

    Grüße
      Klaus

    1. Hallo,
      Da gibt eine Menge Möglichkeiten
      Hier so spontan alles, was mir so eingefallen ist:
      1.) Modulo-Rechnen:

      $remote_file = "$remote_dir/b_". ($day % 5) .".txt";

      Siehe: perldoc perlop
      2.) Wochentag heranziehen:

      $remote_file = "$remote_dir/b_". gmtime(time)->[6] .".txt";

      Siehe: perldoc -f gmtime

      Allerdings sind es dann sieben dateien :-(

      3.)SteuerArray:
      @Nummern = (1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1,3,2,4,5,1);

      Reihenfolge beliebig

      $remote_file = "$remote_dir/b_$Nummer[$day].txt";

      Zugegeben auch nicht besonders elegant.

      Naja, irgendwas wird wohl dabei sein.
      Und ausbaufähig ist jede Lösung ;-)

      Grüße
        Klaus

      Hi Klaus,

      Alter Schwede :-), Du kennst Dich aus!!

      Klasse, ich bedanke mich bei Dir, schönen Tag,

      Ted

      P.S: Ich nehm das mit dem Wochentag!