Thread Inhalte zweier Ordner effektiv vergleichen (16 answers)
Opened by Dateipfade at 2009-09-25 19:02

bianca
 2009-09-28 15:36
#126291 #126291
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Guest ls
Hm, also rsync hilft mir dabei leider nicht. Das erstellen dieser "Listen
absoluter Pfade" ist nur der erste Schritt, weitere sollten danach folgen.
Gut, aber kann ich mit File::Find ein Listing aehnlich wie mit ls erzeugen?
Ich habe jetzt noch was gelesen von readdir. Danke soweit. Mit welchem laest
sich am ehesten ein Listing von absoluten Pfaden erzeugen? Tipps?

Ein möglicher Ansatz mit readdir:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my @lesen;
push @lesen,'/startpfad';
my %datei1;
local *VERZEICHNIS;
while (scalar @lesen) {
my $verz = shift @lesen;
opendir (VERZEICHNIS,$verz) or die $!;
foreach my $file (sort {$a cmp $b} readdir VERZEICHNIS) {
if ($file eq '.' || $file eq '..')
next; # Gleiches Ver. oder höher springen
}
elsif (-d "$verz/$file") {
push @lesen,"$verz/$file"; next; # Verzeichnis gefunden
}
else {
$datei1{$verz}{$file} = defined; # Datei gefunden
}
}
}


Das läßt Du anschließend ein zweites mal laufen und kannst dann bequem die beiden gebildeten Hashes vergleichen und entspr. Dateien kopieren.

Es gibt sicher elegantere und schnellere Methoden z.B. mittels File::Find

EDIT: Statt den Hash einfach nur defined zu setzen könnte man natürlich auch das Datum der Datei speichern, um neu und alt zu unterscheiden.

Letzte Änderung einer Datei bekommt man mit -C "$verz/$file" oder (stat("$verz/$file"))[9]
Last edited: 2009-09-28 15:42:56 +0200 (CEST)
10 print "Hallo"
20 goto 10

View full thread Inhalte zweier Ordner effektiv vergleichen