Zum Inhalt springen

per script 5 Sicherungen aufbewahren, Rest löschen?


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von bigvic
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...