Dateinamen umbenennen - erster Buchstabe

Z

Zico

Lebende Foren Legende
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

Code:
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:

Code:
for f in `find -regex ".*.[hog|HOG|msn|MSN|mn2|MN2]$" -printf '%P''\n'`;
do mv $f `perl -e "print ucfirst('$f')"`;
done
 
Zuletzt bearbeitet:
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
 

Ähnliche Themen

Letzten Tag löschen

[Suche] - Hilfe bei der Überarbeitung eines bash-Scripts

Windows clients können nicht mehr auf lange laufendes System zugreifen

NagiosGrapher 1.7.1 funktioniert nicht

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Zurück
Oben