Das muß doch auch einfacher gehen...
Ted
- perl
0 Ergänzung
Ted0 Jens Irrgang0 Ted
0 Michael Schröpl0 Michael Schröpl0 Ted
0 Klaus Mock0 Ted
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:
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
$day ist natürlich definiert und ist der Tag des lfd. monats...
Danke nochmal im Vorraus
Ted
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
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:
Nicht noch besser und eleganter geht.
Ich genau weiß, wie das mit dem Einlesen geht (muß nochmal in die perldoc!).
Danke erstmal
Ted
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
mfG - Michael
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
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
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);
$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
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!