Archiv verlassen und diese Seite im Standarddesign anzeigen : 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? 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.]
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.