Hallo, On Thu, 13 Jun 2002, ratti wrote:
Ich will nicht mv'en sondern cp'en :-)
Meines Wissens gibt es in perl zwar "rename" als Äquivalent zu "mv", aber nix für "cp". Ich habe "File::Copy" angeguckt. Läuft bei mir nicht, was aber egal ist: Es kann ohnehin nicht kopieren unter Beibehaltung des original-Zeitstempels.
Schalt ein 'touch -a -r ORIGINAL KOPIE' dahinter...
Da ich nix schlaueres gefunden habe, verwende ich also derzeit in perl:
`cp "$alter_name" "$neuer_name" -a`;
Also Übergabe eines Befehls an die Shell. "-a" belässt den Zeitstempel. Wobei der Zielname mit s/\W/_/g behandelt wurde. Damit bin ich auf der sicheren Seite. Für mein Programm langt das, aber die Subroutinen hätte ich eigentlich gerne sicherer, da ich sie publizieren werde. Und derzeit werden ungefährliche Zeichen wie ! und + dadurch auch gekillt.
Alternativen gerne gehört. Irgendwas in der Art von "Kopiere::Gnadenlos" :-)
Teste mal mit folgendem: ==== #!/usr/local/bin/perl -w use strict; my ($safe, $tmp); [..] foreach(@ARGV) { $safe = $_; $safe =~ s/[^[:alnum:]]/_/g; $tmp = $safe . ".tmp"; rename($_, $safe); `cp $safe $tmp`; rename($tmp, $_); } ==== Ja, ich weiss, dass ist KRANK! Aber so bekommt das 'cp' nur sichere Dateinamen zu sehen ;) Experimentiere aber evtl. auch mit 'quotemeta'... Und mit stat vorher und `touch` hinterher muesste sich ggfs. die atime (usw.) wieder korrigieren lassen ;) Die Ersetzung aller ^[:alnum] kannst du natuerlich noch beliebig verfeinern ;) Achso: Woher kommen nochmal die kranken Dateinamen? Sind das schon vorhandene (und wenn ja, auf welchem FS?) oder liest du die erst aus den Dateien aus? Und noch ne Idee: experimentiere evtl. mal mit find ... -print0 | perl -e '... split("\0", ...); ...' So auf die schnelle hab ich aber nix hinbekommen ;) Ein ' | xargs -0' hilft in diesem Fall wohl auch nicht weiter... -dnh PS: Wer kranke Dateinamen verwendet, erlaubt oder in Umlauf bringt... -- hier ist es ja wie im Urlaub! Nix mehr zu tun. Kein Dau zu beerdigen. Kein Elch zu verjagen. Nicht mal ein kleiner Troll möchte sterben ?gehen. Na dann setz Ich mich mal hier auf die Friedhofsbank und geniesse die Ruhe. Ach ja ! Meine Froschpillen werden langsam knapp. [Woko° in dag°]