PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rekursives umbenennen



TheDodger
01-09-2002, 16:51
Ich suche ein Script, welches mir - ausgehend vom basisverzeichniss - alle verzeichnisse / dateien so umbenennt, daß ich nur noch kleinschreibung habe und underlines nach leerzeichen gewandelt werden.
für ersteres hatte ich mal ein script ... allerdings weiß ich wirklich nicht mehr, wie ich das zusammengestrickt hatte! :(

Kann mir büdde jemand helfen?
(Nein, bitte nicht mit 'man sed' kommen ... das hab ich schon!)

fork
02-09-2002, 04:36
Du möchtest Unterstriche in Leerzeichen umwandeln, nicht umgekehrt?

find . -exec normalize.pl {} \;

normalize.pl:

#!/usr/bin/perl
$file_or_dir=(split("/",$ARGV[0]))[-1];
($directory=$ARGV[0])=~s-^(.*)/[^/]*$-$1-;
$file_or_dir=~s/_/ /g;
$file_or_dir=~s/(.*$)/\L$1\E/;
print "$ARGV[0] -> $directory/$file_or_dir\n";
rename("$ARGV[0]","$directory/$file_or_dir") or warn "Kann $ARGV[0] nicht umbenennen:$!\n";

TheDodger
02-09-2002, 05:39
Original geschrieben von fork
Du möchtest Unterstriche in Leerzeichen umwandeln, nicht umgekehrt?

richtig

normalize.pl:
...

Perl? :)
Hmmm, ich errinnere mit an einen einzeiler mit sed :D

Und was macht jetzt dein Perlscript genau?
Ich seh da wirklich nicht durch ... aber trotzdem danke!!!!

fork
02-09-2002, 11:42
Einzeiler mit sed: bitte, ich lerne gern was dazu

TheDodger
02-09-2002, 12:37
Falls ich es noch nicht gesagt hatte ... ich weiß nicht mehr, wie das gemacht hatte und wo sich das Teil jetzt befindet.
Ich musste meinen Rechner mehrmals neu aufsetzen ...

Aber was genau macht denn nun dein Perl-Script?

TheDodger
02-09-2002, 13:32
Original geschrieben von fork
Einzeiler mit sed: bitte, ich lerne gern was dazu
ist zwar nicht sed, aber trotzdem einzeiler :

mv "$1" | tr "_" " " | tr [:upper:] [:lower:]

fork
02-09-2002, 21:26
mv "$1" | tr "_" " " | tr [:upper:] [:lower:]

Das mag mit 1 Datei/Verzeichnis gehen, aber was hier herauskommen wird geht nicht:

mv "/bla_Bla/bLa_blA" "/bla bla/bla bla"

...da immer nur ein elementares Objekt umbenannt werden kann



#!/usr/bin/perl

$file_or_dir=(split("/",$ARGV[0]))[-1];
Die Variable $ARGV[0](Der erste Parameter) wird durch das
Trennzeichen "/" in Elemente aufgeteilt und davon das letzte([-1]) wird
in die Variable $file_or_dir geschrieben

($directory=$ARGV[0])=~s-^(.*)/[^/]*$-$1-;
Der Befehl liefert den Verzeichnisnahmen in die Variable
$directory. Für mehr Info's schau mal ein Tutorial zu regulären
Ausdrücken an -> linuxfocus

$file_or_dir=~s/_/ /g;
Ersetzen von _ durch " " in $file_or_dir

$file_or_dir=~s/(.*$)/\L$1\E/;
Ersetzung durch Kleinbuchstaben

print "$ARGV[0] -> $directory/$file_or_dir\n";
Anzeigen was umbenannt wird

rename("$ARGV[0]","$directory/$file_or_dir") or warn "Kann $ARGV[0] nicht umbenennen:$!\n";
umbenennen und informieren über Fehler falls es nicht geklappt hat