Thread Verzeichnisstrukturen älter als 30 Tage verschieben in ein Backup verschieben
(25 answers)
Opened by nastja at 2010-04-15 15:57
Du musst auch die absoluten Pfade in relative umwandeln
Ansonsten kannst du keine Daten von Quelle zum passenden Ziel verschieben Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 #!c:/perl/bin/perl -w use strict; use warnings; use File::Copy; use File::Spec; use File::Find; use File::stat; # dein ordner wo drinne geloescht werden soll my $srcDir ='C:/Users/cthdev34/Desktop/map'; my $destDir = 'C:/Users/cthdev34/Desktop/map/bakup'; my $oldInDays=30; my $st; my $logFile = "$srcDir/Liste.txt"; my $inum_Tage = 30; my @sortFiles; #Elemente älter als 30 Tage my @dirs; #alle Ordner my @fils; #alle Dateien find(\&found,$srcDir); sub found { my $file = $File::Find::name; # Du brauschst die relativen Pfade: my $file_relative=File::Spec->abs2rel($file, $srcDir); push(@dirs,$file) if (-d $file); push(@fils, $file) if (-f $file); push(@sortFiles,$file_relative) if ( -M $file > $inum_Tage); } print "Ordner: $_\n" for(@dirs); print "Datei: $_\n" for(@fils); print "Sortiert: $_\n" for(@sortFiles); # die dateien loeschen die aelter als 30 tage sind for my $file (sort(@sortFiles)) { # für die Quelle aus dem relaiven einen absoluten Pfad machen my $srcName=File::Spec->rel2abs($file, $srcDir); # ist es eine Datei und soll gelöscht werden? if ( -f $srcName) { # für das Ziel aus dem relaiven einen absoluten Pfad machen my $destName=File::Spec->rel2abs($file, $destDir); # nötige Verzeichnisse am Ziel erstellen wenn es nötig ist. my ($volume,$directories,$file) = File::Spec->splitpath( $destName ); make_dirs(File::Spec->catpath($volume, $directories)); # Datei verschieben move($srcName,$destName); } } # die ordner loeschen die leer sind # rmdir loescht nur leere ordner # EDIT: # hier hatte sich noch ein Fehler versteckt foreach( sort(@sortFiles)) { my $DirName=File::Spec->rel2abs($_, $srcDir); if ( -d $DirName) { rmdir($DirName); } } ######################################################################## # Erzeugen von Verzeichnissen wenn sie nicht existieren sub make_dirs { my $path=shift; my $dnow=''; ($dnow,$path)=File::Spec->splitpath($path, 1); for(File::Spec->splitdir($path)) { $dnow=File::Spec->join($dnow, $_); unless(-d $dnow) { mkdir($dnow) or die("ERROR mkdir: $dnow ($!)"); } } } Edit: Fehler im Code Zeile 61ff. Last edited: 2010-04-15 21:28:10 +0200 (CEST) |