-
dateien umbenennen
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
-
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?
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.]
-
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.]
-
Danke thorsten,
funzt einwandfrei.
Auch herzlichen dank an thommy,
konnte mit der erklärung meinen horizont erweitern.
gruss
ag
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen