PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dateinamen in kleinbuchstaben wandeln



wolfgang
19-09-2000, 09:47
kennt jemand ne idee wie ich automatisch in dateinamen vorkommende grossbuchstaben in kleinbuchstaben umwandeln kann (verzeichnisweise)

vieleicht ein copy oder rename mit * oder ? wie unter dos - geht das ?

gruss
wolfgang

thommy
19-09-2000, 10:20
Würde ich mit einer "awk"-Anweisung machen.

Beispiel:

<pre>
user@sonne&gt; ls BACKUP.TXT | awk '{print tolower($1)}'
backup.txt
</pre>

Thomas

thommy
19-09-2000, 10:27
In einem Shellskript könnte das wie folgt ausschauen:

<pre>
set $(ls)

for i do
test -d $i && continue
mv $i $(echo $i | awk '{print toupper($1)}') 2>/dev/null
done
</pre>

Grüße Thomas

wolfgang
19-09-2000, 14:03
DANKE erstmal aber...
wenn ich dein erstes beispiel ausfuehre so bekomme ich zwar den dateinamen als kleinbuchstaben aber die datei behaellt den namen in gross

dein 2. beispiel kapiere ich leider nicht

kannst du mir da noch mal helfen ?

gruss
wolfgang :-)

wolfgang
19-09-2000, 14:13
DANKE das script fuktioniert !!!

DOCH
ich habe es noch nicht verstanden, bitte um erklaerung


gruss
wolfgang :-))))))

thommy
19-09-2000, 15:13
Einführung in Shellprogrammierung - Teil 1 http://www.linuxforen.de/ubb/smile.gif

Zeile für Zeile...

<code>set $(ls)</code>

$(ls) wird durch das Ergebnis substituiert, also sieht der Aufruf in einem Zwischenschritt in etwa so aus:

<code>set Bla.TXT bla.hlp FOO.tXt</code>

"set" stellt seine Argumente in eine Umgebungsliste, sie verhält sich ebenso, wie die an ein Shellskript übergebenen Argumente. Deswegen arbeitet die nachfolende Zeile:

<code>for i do</code>

mit diesen Argumenten (alternativ kannst Du die Zeilen als "for i in $(ls) do" zusammen fassen)

<code>test -d $i && continue</code>
Hier wird getestet, ob es sich um ein Verzeichnis handelt, wenn ja, wird mit dem nächsten Schleifendurchlauf fortgefahren (möchtest Du auch Verzeichnisse in Kleinbuchstaben umwandeln, so streiche die Zeile)

<code>mv $i $(echo $i | awk '{print toupper($1)}') 2>/dev/null</code>

Der Reihe nach: $i ist die gerade betrachtete Datei und $(...) eine Kommandosubstitution, die den Dateinamen in Kleinbuchstaben wandelt. Am Ende steht die Fehlerumleitung nach /dev/null, da sonst "mv" meckern würde, falls $i bereits aus Kleinbuchstaben besteht).

Nun zum "awk".
awk arbeitet auf Dateien, indem wir den Dateinamen per Pipe "echo $i |..." dem Kommando zuführen, sieht es für dieses aus, als stünde die Zeichenkette in einer Datei. Die Arbeitsweise des awk zu erklären, würde meinen Zeitrahmen etwas sprengen, im Beispiel wandelt er die Zeichenkette (die im als Argument in $1 zur Verfügung steht) in Kleinbuchstaben um und gibt sie auf die Standardausgabe aus "print".

So, ich hoffe jetzt kommt etwas Licht ins Dunkel...

Thomas

wolfgang
19-09-2000, 18:10
SUPER nun beginne ich den inhalt zu kappsen
ich danke Dir recht sakrisch!

gruss
wolfgang