PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateinamen umbenennen - erster Buchstabe



Zico
02.03.2005, 18:55
Hi Leute

Ich bin gerade dabei - bzw. immer noch - meine alten Descent Games nen bissl aufzuplieren mit den Linux Ports.
Jetzt wollte ich noch meine ca. 5000 Extra Levels (pro Level 2 Files oder mehr) in das Spiel einbringen. Beim Ausprobieren is mit denn aufgefellen, dass viele Levels nicht funktionieren.

Der Grund dabei ist folgender:
Das Spiel sucht nach einer informationsdatei Namens "Level.msn" und bei Start des Levels wird dann die entsprechende Datei "Level.hog" oder "Level.rdl" geladen.
Und da fängt das Chaos an, denn das Spiel sucht diese Files CASE SENSITIV. Und zwar genau so wie beschrieben. Vorne ein Grossbuchstabe und der Rest klein. Das schöne ist, dass sämtliche Files gerade eben NICHT so geschrieben sind sonder oft:
LEVEL.MSN, level.hog, LEVEL.HOG oder LEVEL.hog etc.
Dabei fällt mir noch grad auf, dass es noch spezielle Files im Verzeichnis gibt, mit einer speziellen Erweiterung, die dann NICHT umbenannt werden sollen. ARGH.

Ich habe ja schon viel gesucht und auch ein Script gefunden die LEvel einheitlich umzubenennen. Komplette groß und/oder Kleinschreibung funktioniert ja per Scriipt. Aber jeweils nur den erstenBuchtaben umzubenennen , da bin ich und auch google wohl sehr überfragt. Gibt es da ne Möglichkeit oder muss ich das alles per Hand machen?


EDIT: Falls es wen interessiert, ich habe die Lösung mittlerweile mit nem guten Kumpel raus:

Erstmal nennen wir alles zu Kleinbuchstaben um


for f in * ;
do n=`ls $f | tr [:lower:] [:upper:]`;
mv $f $n;
done

Dann find-en wir per regex alle erweiterungen die benötigt werden und nennen dort per Perl das erste Zeichen um.
der printf schalter von find kümmert sich dann darum, dass die ausgabe nicht ./TEXT lautet und das Script nicht versucht den Punkt gross zu schreiben. Und so siehts dann aus:


for f in `find -regex ".*.[hog|HOG|msn|MSN|mn2|MN2]$" -printf '%P''\n'`;
do mv $f `perl -e "print ucfirst('$f')"`;
done

kingdom
04.03.2005, 16:19
Hallo

Hast du perl installiert?
Ich bin zwar noch perl-Anfänger, aber es war eine gute Übung und müßte funktionieren.

Also hier kommt das skript:

#!/usr/bin/perl -w
use strict;

my $input="";
my $output="";

opendir(DIR, ".");

while (defined($input=readdir(DIR))){
if($input=~/.+\..+/){
$output=$input;
$output=~s/^(\w)(.*\..+)/\u$1\L$2/;
rename $input, $output;
}
}
closedir(DIR);

Clemens