1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use File::Copy::Recursive qw(dircopy);
use File::Path qw(rmtree);
sub remove_and_copy{
my ( $path_ziel, $path, $pfad_ort) = @ARG;
$path =~ /(\Q$verzeichnisname_quelle\E)([\\\/]+)(.+)([\\\/]+)(.+)/;
my $datum= $5;
if ($path_ziel ne ''){
rmtree($path_ziel)
|| Fehlerausgang("Konnte Verzeichnis \"$path_ziel\" nicht löschen: $!");
print_konsole_und_log("\nVerzeichnis $path_ziel gelöscht.");
}
my $path_ziel_neu = $pfad_ort."\\".$datum;
mkdir($path_ziel_neu);
$path =~ s/\//\\/g;
dircopy($path, $path_ziel_neu)
|| Fehlerausgang("Konnte Verzeichnis \"$path\" nicht nach \"$path_ziel_neu\" kopieren: $!");
print_konsole_und_log("Verzeichnis \"$path\" nach \"$path_ziel_neu\" kopiert.");
}
2016-04-24T13:35:41 hlubenowKönnte daran liegen, was dircopy() macht.
2016-04-24T14:14:24 bob.george2016-04-24T13:35:41 hlubenowKönnte daran liegen, was dircopy() macht.
Ich versteh deine Antwort nicht.
2016-04-25T19:42:20 hlubenow2016-04-24T14:14:24 bob.george2016-04-24T13:35:41 hlubenowKönnte daran liegen, was dircopy() macht.
Ich versteh deine Antwort nicht.
Warum nicht? Damit meine ich, lies Dir dieses genau durch und studiere das Verhalten von dircopy() im einzelnen.
Und wenn Dir das nicht zusagt, benutze es nicht, sondern kopiere das Verzeichnis von Hand, indem Du Perls eingebaute Funktionen wie mkdir(), usw. oder zuverlässig getestete Module wie File::Copy verwendest. Dann kannst Du Deine eigene Funktion zum Kopieren von Verzeichnissen schreiben, über die Du dann die volle Kontrolle hast, so daß sie auch nichts Unerwartetes tut.
2016-04-26T07:09:20 bob.georgeIch weiß was dircopy macht.
bob.georgeDer dircopy wird auch sauber ausgeführt, nur legt er 2 Verzeichnisse an. ... Ich verzweifel langsam.
2016-04-26T14:44:38 hlubenow2016-04-26T07:09:20 bob.georgeIch weiß was dircopy macht.
Sieht nicht so aus:
bob.georgeDer dircopy wird auch sauber ausgeführt, nur legt er 2 Verzeichnisse an. ... Ich verzweifel langsam.
1
2
3
4
5
6
use Data::Dumper;
print "vorher:", Dumper [$path, $path_ziel_neu];
system("ls", "-R", "Gardasee");
dircopy(...);
print "nachher:\n";
system("ls", "-R", "Gardasee");
2016-04-25T15:38:24 bob.georgeDann lösche doch einfach das "gelöschte" nochmals mit rmdir.Er legt ja auch das gewünschte Verzeichnis an, nur leider zusätzlich auch das gelöschte.
2016-04-25T15:50:05 GwenDragonDann lösche doch einfach das "gelöschte" nochmals mit rmdir.
2016-04-26T07:27:15 betterworld1. du schreibst ein neues Script, was NUR diesen dircopy-Aufruf enthält, und die Argumente werden als Konstanten angegeben.
2. Wenn es immer noch das "falsche" Verhalten zeigt, dann machst du das ganze nochmal mit einem Test-Verzeichnis mit einfacher Struktur, was du nur für den Grund erstellst, das Problem zu untersuchen ("C:\Testverzeichnis1\x" oder so)
3. Wenn es immer noch das "falsche" Verhalten zeigt, guckst du nochmal genau in die Doku, ob du es richtig benutzt hast
4. Wenn es immer noch das "falsche" Verhalten zeigt, kannst du uns nochmal fragen oder meinetwegen einen Bug bei dem Modul reporten
2016-04-26T12:06:01 betterworldPoste bitte das Script aus Schritt 2 und beschreibe bitte genau, wie das Testverzeichnis strukturiert ist.
2016-04-24T15:57:53 GwenDragonSchalte bitte rmtree mal auf verbose. Beispiel: rmtree($path,1);
Dann siehst du was gelöscht wird und ob das komplett ist!
2016-04-24T16:57:20 GwenDragonWieso erzeugst du $path_ziel_neu mit mkdir? Das mach doch dircopy schon selbst.
1
2
3
# baue Pfad zu Verzeichnis mit catdir zusammen:
perl -MFile::Spec:: -E "$a='C:///temp'; $b = 'foo/bar\\123'; say File::Spec->catdir($a,$b);"
C:\temp\foo\bar\123
2016-04-26T11:49:43 LinuxerWas steht eigentlich in der Variable $verzeichnisname_quelle, die Du im Regex (Zeile 6) verwendest?
Und was ist, wenn der Regex mal keinen Treffer erzeugt? Dann wird u.U. irgendwas altes (falsches) als Datum verwendet...
Quotedrin. Ich geb dir recht, das Ganze ist mit heisser Nadel gestrickt und nicht unbedingt auf Stabilität ausgelegt. Muss es auch nicht, da ich es nur privat einsetze und das Skript vermutl. nur ein paar mal laufen wird. So nach und nach sind immer mehr Funktionen dazu gekommen und jetzt ist es doch recht umfangreich.\\SERVER\Öffentlich\quelle\Bilder