User since
2004-04-30
18
Artikel
BenutzerIn
Hi,
wie benennt man denn am besten ein Verzeichnis um? Geht das nur mit File::Copy und move() oder gibt es da was besseres?
Christoph
User since
2003-08-04
7321
Artikel
ModeratorIn
würde mir ne rekursive funktion bauen!
User since
2003-09-10
141
Artikel
BenutzerIn
&Rename("original-ordner-name","neuer-ordner-name");
sub Rename {
rename($_[0]"$_[1]);
}
Haut mich nicht, ich bin ein Noob!
User since
2003-08-04
2536
Artikel
ModeratorIn
freefaq: du baust eine wrapper-sub namens Rename um eine builtin namens rename? mh, magst du keine kleinbuchstaben-subs in deinem haupt-code oder hat das irgendeinen anderen grund?
User since
2003-11-28
3645
Artikel
ModeratorIn
Man verwendet einfach "rename", wenn sich Quelle und Ziel im gleichen Filesystem befinden.
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=ptk,11.05.2004, 11:35]wenn sich Quelle und Ziel im gleichen Filesystem befinden.[/quote]
auf sowas wollte ich mich nicht verlassen wollen!
User since
2003-11-28
3645
Artikel
ModeratorIn
Wenn sich Quelle und Ziel im gleichen Verzeichnis befinden, kann man sich darauf verlassen.
Ueblicherweise ist das Verschieben von Verzeichnissen zwischen Filesystemen bei Unix-mv so implementiert, dass zuerst ein "cp -pR" gemacht wird und bei Erfolg der alte Baum geloescht wird. Mit reinen Perl-Mitteln koennte man das rekursive Kopieren z.B. mit File::NCopy machen und das Loeschen des alten Baums mit File::Path::rmtree.
Schade, dass File::NCopy nicht Teil der Standard-Perl-Distribution ist.
User since
2003-08-04
7321
Artikel
ModeratorIn
man sollte aber so programmieren, dass alle Wenn's und Aber's abgedeckt sind!
User since
2004-04-30
18
Artikel
BenutzerIn
Hi,
danke, die Funktion rename() wird es für meine Zwecke tun. Ich habe auf dem Server eine menge Bilderverzeichnisse, deren Namen eine passende Ordnungszahl hinzugefügt werden soll, die jeweils aus einer Datenbank gelesen wird. Ich habe einfach keine Lust, jeden einzelnen Ordner von Hand umzubenennen und möchte mir dazu ein einfaches Skript basteln.
Was ist eine "rekursive Funktion", bzw. was bedeutet "rekursives Kopieren"?
User since
2003-11-28
3645
Artikel
ModeratorIn
Klar, wenn man nicht weiss, woher der Input fuer Quelle und Ziel kommt. Wenn man aber weiss, dass sich beide Verzeichnisse auf dem gleichen Filesystem befinden, dann braucht man den anderen Fall ja gar nicht abdecken, oder?
Beispiel: zurzeit mache ich ein Update von meinem Heimrechner auf einen WWW-Server per rsync. Leider ist rsync nicht atomar und somit ist waehrend der Zeit des Updates meine Website teilweise out-of-sync (es hat sich aber noch niemand beschwert :-). Um das zu verhindern, werde ich das Update so umstellen: lokales rsync auf dem Server von Webverzeichnis nach Webverzeichnis.tmp, rsync von meinem Rechner nach Webverzeichnis.tmp, und jetzt der kritische Part:
rename Webverzeichnis Webverzeichnis.old
rename Webverzeichnis.tmp Webverzeichnis
rename Webverzeichnis.old Webverzeichnis.tmp
Das ist leider immer noch nicht atomar, duerfte aber schnell genug sein :-) Ein rekursives Kopieren/Verschieben kommt hier nicht in Frage.