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!)
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!!!!
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:]
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.