koli7bri Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 Hallo an alle im Board, ich bin neu und versuche einmal eine Anfrage.. Wir haben per Sicherungsscript eine Ordner mit unseren Serversicherungen als *.zip-Archive. Dieser Ordner füllt sich pro Tag mit einer Sicherungsdatei als *.zip. Nun läuft irgendwann der Speicher voll. Gibt es eine Möglichkeit, per Script / Batch die Anzahl der *.zip Archive bspw. auf 5 zu setzen und gleichzeitig die ältesten zu löschen? Wenn ich nur die ältesten filtere und entferne, könnte der Fall eintreten, bei dem sie Sicherung fehlschlägt und alle Sicherungen nach einer Zeit gelöscht werden, was natürlich nicht so gut wäre. Vielen Dank an alle Gruß koli7bri Zitieren
koli7bri Geschrieben 20. Juli 2009 Autor Geschrieben 20. Juli 2009 Sorry Windows, ich glaub im Bereich Linux hätte man da mehr Möglichkeiten.. Danke;) Zitieren
Crazy_man Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 notfalls kansnt du ja cygwin unter windows installieren Zitieren
Eratum Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 Ihr macht Datensicherung mit ZIP? Naja wie auch immer... Mach's doch z.B. mit VBS oder BAT. Das ganze lässt du dann einmal am Tag ausführen (oder je nachdem wie oft ihr sichert). Ablauf könnte dann so aussehen: Anzahl der *.Zip Dateien im Ordner auslesen Wenn es kleiner gleich 5 sind => Skript ende Erstellungsdatum einlesen Die ältesten löschen, bis nur noch 5 drinne sind... Fertig Zitieren
bigvic Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 Hi, Sorry Windows, ich glaub im Bereich Linux hätte man da mehr Möglichkeiten.. daher sollte man eine plattforumunabhängie Scriptsprache benutzen Normalerweise solltest du das ja selbst machen, aber hier mal ein Perlscript, dass dein Problem löst. #!c:/perl/bin/perl -w # Author: victorinox # Title: logrotate.pl use strict; my $minimum_days_to_keep=5; my $minimum_number_of_files_to_keep=5; my $directory="d:/mybackup"; my $suffix="zip"; ### main my %hash; foreach my $file (glob ("$directory/*$suffix")) { my $age = -M $file; $hash{$file}=$age; } my $i=0; foreach my $key (sort {$hash{$a} <=> $hash{$b}} (keys(%hash))) { if (($i >= $minimum_number_of_files_to_keep) && ($hash{$key} > $minimum_days_to_keep)) { unlink($key); } $i++; } Getestet auf Solaris (Perl 5.8) und Windows (Perl 5.10). Zitieren
koli7bri Geschrieben 20. Juli 2009 Autor Geschrieben 20. Juli 2009 Vielen Dank an Euch, leider bin ich im Srcipten nicht so sehr gut. Wenn dieses unter einer Batch oder einem vb-script möglich wäre, dann wär mir schon geholfen. Die Situation schaut so aus: In dem Backup-Ordner liegt ein zip-Archiv einer VM. Dieses Archiv heisst virtuelle_maschine_06-07-2009.zip Pro Tag zählt das Scherungsscript das aktuelle Datum aus und benennt das Zip-Archiv entsprechend. Davon benötigen wir aber nur 5 Sicherungen. Zitieren
Enno Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 Oder nimm: Watch Directory Damit kannst du Verzeichniss überwachen und Dinge tun. Kopieren, verschieben oder auch löschen. Dann sag dem Programm: alles älter als 5 Tage soll gelöscht werden. Zitieren
bigvic Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 Vielen Dank an Euch, leider bin ich im Srcipten nicht so sehr gut. Wenn dieses unter einer Batch oder einem vb-script möglich wäre, dann wär mir schon geholfen. Das Script ist lauffähig, du musst nichts ändern ausser die Pfade. Zitieren
koli7bri Geschrieben 20. Juli 2009 Autor Geschrieben 20. Juli 2009 Meinst Du das Perl Script? Ich habe jedoch keinen Perl Interpreter auf dme SBS2003. Sollte ich Cygwin installieren oder ist dieses anders möglich? Danke an alle Zitieren
bigvic Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 ActiveState ActivePerl Free Download Nein, cygwin ist nicht nötig. Am besten via cli aufrufen um es zu testen. Zitieren
koli7bri Geschrieben 20. Juli 2009 Autor Geschrieben 20. Juli 2009 Vielen Dank victorinox, ich gehe davon aus die Perl Umgebung zu installieren. KAnn ich dann das Script per Taskplaner ausführen? Ich hatte leider noch keine Erfahrung mit Perl. Besten Dank Zitieren
bigvic Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 Es funktioniert wie ein normales batch-Script auch. Insofern kannst du alles damit machen, was mit solchen auch geht. Zitieren
koli7bri Geschrieben 20. Juli 2009 Autor Geschrieben 20. Juli 2009 Ich habes dieses mal ausprobiert: #!c:/perl/bin/perl -w # Author: victorinox # Title: logrotate.pl use strict; my $minimum_days_to_keep=10; my $minimum_number_of_files_to_keep=10; my $directory="Z:\Backup_VM's\test"; my $suffix="zip"; ### main my %hash; foreach my $file (glob ("$directory/*$suffix")) { my $age = -M $file; $hash{$file}=$age; } my $i=0; foreach my $key (sort {$hash{$a} <=> $hash{$b}} (keys(%hash))) { if (($i >= $minimum_number_of_files_to_keep) && ($hash{$key} > $minimum_days_to_keep)) { unlink($key); } $i++; } Und erhalte dabei aber folgendes: Unrecognized escape \B passed thougt at D:\Backup\scripts\Anzahl_VMs.pl line 9. Die fetten Zeilen habe ich angepasst, das Script habe ich als *.pl bezeichnet. Dieses wird auch gleich mit aktive Perl Zeichen dargestellt. Gestartet habe ich es in einer Dos Box. In meinem Test Verzeichnis habe ich Textdateien als zip umbenannt und 40x hinein kopiert. Dabei tut sich jedoch nichts. Habe ich einen Fehler? Danke Zitieren
bigvic Geschrieben 20. Juli 2009 Geschrieben 20. Juli 2009 (bearbeitet) Zum einen hast du / und \ umgedreht. Sprich directory="Z:/Backup_VM's/test" wäre richtig. Ausserdem wirst du mit dem kopieren ja die m-time der Datei ändern (modified time) und somit ist keine Datei älter als 1 Tag. Wenn du $minimum_days_to_keep=0; setzt, dann behälst du "nur" die jüngsten 10 Dateien (da $minimum_number_of_files_to_keep=10) und das Alter der Datei an sich spielt keine Rolle, da ja alle älter sind als 0 Tage. ( Wobei natürlich beim Kopiervorgang die Frage ist, wann welche Datei kopiert wird und somit welche m-time gesetzt wurde ). Am einfachsten kannst du es testen indem du die Dateien für den Test eine nach der anderen kopierst und zwar chronologisch. Bearbeitet 20. Juli 2009 von bigvic Zitieren
koli7bri Geschrieben 20. Juli 2009 Autor Geschrieben 20. Juli 2009 Hey DANKE :uli Nun funktioniert es, so wie ich es benötige!!! ein ganz großes Danke und natürlich eine Menge Respekt. Einfach SUUUUUPER Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.