PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dateien umbenennen



19-09-2000, 22:56
Hallo,
ich habe folgendes Problem:
Ich erstelle mp3-Dateien mit krabber. Das Ausgabeformat dieser Dateien
sieht folgendermaßen aus: 01.\ .mp3 usw, also es befindet sich immer
ein Leerzeichen zwischen den beiden Punkten. Nun soll durch ein Script
dieses Leerzeichen und ein Punkt verschwinden, also die Datei soll hinter-
her so aussehen: 01.mp3.
Habe nun selbst schon versucht:
#! /bin/bash

for i in $(ls ??.\ .mp3) do
mv $i.\ .mp3 $i.mp3
done

Ergebniss: syntax error in der Zeile mv $....
Was mache ich hier falsch? Muss noch dazu sagen, dass ich in Sachen
Shellprogrammierung ein absoluter Anfänger bin.
Wer kann mir hier weiterhelfen?
gruss
andreas

thommy
20-09-2000, 07:37
Durch das Leerzeichen erhält "mv" vier !!! Argumente.

Deine Datei ist bspw: "01 .mp3", damit expandiert die "mv"-Zeile zu

<code>"mv 01 .mp3 01 .mp3.mp3"</code>

Logisch, dass "mv" damit nichts anfangen kann, da "01" nicht existiert, also was bitte soll umbenannt werden? http://www.linuxforen.de/ubb/wink.gif

Der Schritt 1 wäre also, den Namen zu quoten:

<code>mv "$i" ...</code>

Problem ist nun der Zielname...hier hilft Dir die Parametersubstitution, d.h. Du musst den Dateinamen vor dem Leerzeichen abschneiden und ".mp3" anhängen. Folgende Zeile tut's:

<code>mv "$i" ${$i% *}.mp3</code>

Achtung: Zwischen "%" und "*" steht genau ein Leerzeichen!

Thomas



[Dieser Beitrag wurde von thommy am 20. September 2000 editiert.]

pitu
20-09-2000, 09:28
Also, wenn ich das richtig verstanden habe, dann hast du dateien, die in etwa folgendermassen ausschauen:
<pre>
01. .mp3
02. .mp3
03. .mp3
</pre>
Und diese willst du umwandeln in
<pre>
01.mp3
02.mp3
03.mp3
</pre>

Deine for-Schleife liefert aber folgendes Ergebniss:
<pre>
tw@toto:~ > for i in $(ls ??.\ .mp3); do echo $i;done
01.
.mp3
02.
.mp3
03.
.mp3
04.
.mp3
tw@toto:~ >
</pre>

Deine for-Schleife muss anders lauten:
<pre>
tw@toto:~ > for i in ??.\ .mp3; do echo $i;done
01. .mp3
02. .mp3
03. .mp3
04. .mp3
tw@toto:~ >
</pre>

Also:
<pre>
tw@toto:~ > for i in 01 02 03 04; do touch $i.\ .mp3; done
tw@toto:~ > ls *mp3
01. .mp3 02. .mp3 03. .mp3 04. .mp3
tw@toto:~ > for i in ??.\ .mp3; do mv "$i" `basename "$i" .\ .mp3`.mp3; done
tw@toto:~ > ls *mp3
01.mp3 02.mp3 03.mp3 04.mp3
tw@toto:~
</pre>

Zur besseren Lesbarkeit habe ich in den Scripten das Leerzeichen in den Dateinamen als 2 Leerzeichen dargestellt.

Anders ausgedrückt:
<pre>
0x. .mp3 = 0x. .mp3
./ .mp3 = ./ .mp3
</pre>


thorsten

------------------
Thorsten Wandersmann
SuSE GmbH, Nuernberg


[Dieser Beitrag wurde von Thorsten Wandersmann am 20. September 2000 editiert.]

20-09-2000, 23:06
Danke thorsten,
funzt einwandfrei.
Auch herzlichen dank an thommy,
konnte mit der erklärung meinen horizont erweitern.
gruss
ag