Ich möchte ein Verzeichnis,samt inhalt(Datein und Unterverzeichnisse) kopieren.
Das Programm wie gleich aufgeführt macht folgendes:
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
use Cwd;
use File::Copy;
$DST_DIR = "/home/tmarsh/.fluxbox/"; #das ist das Ziel Verzeichnis
$SRC_DIR = "/usr/portage/x11-wm/fluxbox"; #das ist das Quellverzeichnis,ab da alles kopieren
mkdir("$DST_DIR",0755) or die "kann $DST_DIR nicht erstellen: $!\n"; #legt das Zielverzeichnis an
Fluxfscan("$SRC_DIR"); #ruft die Funktion auf, und fängt in dem verzeichniss an zu arbeiten was ich übergeben habe
sub Fluxfscan {
my ($workdir) = shift; # hier wird die varaible von dem Funktionsaufruf übergeben
my ($startdir) = &cwd; #hier wird festgestellt in welchen Verzeichnis ich mich gerade in der Console befinde
chdir($workdir) or die "Kann nicht in $workdir wecheseln: $!\n"; #hier wechselt er von dem Consolen-verzeichnis ins arbeitsverzeichnis
opendir(USR,".") or die "Kann $workdir nicht öffnen: $!\n";
my @names = readdir(USR);
closedir(USR);
foreach my $name (@names) {
next if ($name eq "."); #überspringt "."
next if ($name eq ".."); # überspringt ".."
print "$name\n";
# if (-d $name) { #wenn $name ein verzeichnis ist ...
# mkdir("$DST_DIR"."$name",0755) or die "Kann $name nicht anlegen\n"; #legt er in dem DST_DIR den neuen unterverzeichnis namen an
# &Fluxfscan($SRC_DIR . $name); #hier ruft er die Funktion wiedrum auf um den inhalt des neuen DIRS festzustellen
# next;
}
copy("$name","$DST_DIR"); #kopieren der datein ins DST_DIR
}
chdir($startdir) or die "Kann nicht in $startdir wechseln: $!\n"; #wecheslt von dem workdir ins ursprüngleche consolen dir zurück
}
die variable $name enthält zum beispiel folgende reihenfolge:
flubox/
- aDatei
- bDatei
- cDatei
- dVerzeichnis
- dVerzeichnis-aDatei
- dVerzeichnis-bDatei
-eDatei
-fDatei
mein eben aufgeführtes script kopiert die Datein (a,b,c,e,f) ins $DST_DIR, und lässt das Unterverzeichniss ausser acht. Wenn ich nun
if (-d $name) {
mkdir("$DST_DIR"."$name",0755) or die "Kann $name nicht anlegen\n";
&Fluxfscan($name);
next;
verwende, passiert es das er mir das Unterverzeichnis richtig anlegt,aber mir alle Datein ins DST_DIR kopiert ohne zu berücksichtigen wohin bzw. in welche unterverzeichnisse hinein gehören.
Konnte ich es so einigermassen beschreiben? Ist nur die FRage wie ich das realisiere das er mir die richtigen Datein in die richtigen unterverzeichnisse kopiert.