use strict; use File::Copy::Reliable; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); # Sourceverzeichnis Conditions my $sourcecond = "C:/Testumgebung/testcond/"; # Sourceverzeichnis Orders my $sourceorder = "C:/Testumgebung/testorder/"; my @dateien; my $datei; my $verz; my @ziporder; my @zipcond; my @time = localtime(time); # Auslesen des Sourceverzeichnisses für Conditions opendir(VERZ, $sourcecond); while(defined($datei = readdir(VERZ))) { chomp($datei); if (-d $sourcecond.$datei and $datei ne '.' and $datei ne '..' ) { mkdir $sourcecond."old/"; move_reliable($sourcecond.$datei, $sourcecond."old/".$datei) } elsif( $datei ne '.' and $datei ne '..' ) { push(@dateien, $datei); } } closedir(VERZ); # Bestimmen von Jahr, Monat und Tag und Sortierfunktion foreach my $file (@dateien){ my @last = localtime((stat($sourcecond.$file))[9]); my $mon = sprintf("%02d",$last[4]+1); my $year = $last[5]+1900; my $destinationcond = $sourcecond.$year."-".$mon."/"; if (-d $sourcecond.$file){}; if ($time[5] gt $last[5]){ mkdir $destinationcond; move_reliable( $sourcecond.$file, $destinationcond.$file ); }; if ($time[5] eq $last[5] & $time[4] gt $last[4]){ mkdir $destinationcond; move_reliable( $sourcecond.$file, $destinationcond.$file ); }; }; # Auslesen des Sourceverzeichnisses für Conditions opendir(VERZ, $sourcecond); while(defined($datei = readdir(VERZ))) { chomp($datei); if (-d $sourcecond.$datei and $datei ne '.' and $datei ne '..' and $datei ne 'old') { push(@zipcond, $sourcecond.$datei."/"); } } closedir(VERZ); print @zipcond; # Packen der conditions Daten my $cond = Archive::Zip::->new(); foreach my $untercond (@zipcond){ $cond->addTree($untercond,$untercond); }; unless ( $cond->writeToFileNamed($sourcecond.'backupconditions.zip') == AZ_OK ) { die 'write error'; }; # Auslesen des Sourceverzeichnisses für Orders opendir(VERZ, $sourceorder); while(defined($datei = readdir(VERZ))) { chomp($datei); if (-d $sourceorder.$datei and $datei ne '.' and $datei ne '..'){move_reliable($sourceorder."old/".$datei)} elsif( $datei ne '.' and $datei ne '..' ) { push(@dateien, $datei); } } closedir(VERZ); # Bestimmen von Jahr, Monat und Tag und Sortierfunktion foreach my $file (@dateien){ my @last = localtime((stat($sourceorder.$file))[9]); my $mon = sprintf("%02d",$last[4]+1); my $year = $last[5]+1900; my $destinationorder = $sourceorder.$year."-".$mon."/"; if ($time[5] gt $last[5]){ mkdir $destinationorder; move_reliable( $sourceorder.$file, $destinationorder.$file ); }; if ($time[5] eq $last[5] & $time[4] gt $last[4]){ mkdir $destinationorder; move_reliable( $sourceorder.$file, $destinationorder.$file ); }; }; # Auslesen der Unterverzeichnisse für Orders opendir(VERZ, $sourceorder); while(defined($verz = readdir(VERZ))) { chomp($verz); if (-d $sourceorder.$verz and $verz ne '.' and $verz ne '..' and $verz ne 'old') { push(@ziporder, $sourceorder.$verz."/"); } } closedir(VERZ); print @ziporder; # Packen der Order Daten my $order = Archive::Zip::->new(); foreach my $unterorder (@ziporder){ $order->addTree($unterorder,$unterorder); }; unless ( $order->writeToFileNamed($sourceorder.'backuporders.zip') == AZ_OK ) { die 'write error'; }