Hallo Zusammen
Ich habe da ein kleines Skript, das meine MP3's checken soll. Leider haben die aber z.T. Leerzeichen im Namen und so geht das Ding dann nicht mehr, da For nach jedem Leerzeichen eine neue Datei vermutet.
Kann man da irgendwie abhelfen?
THX
Philipp
CODE:
#!/bin/bash
for song in `find . -name "*.mp3"` ; do
if [ mp3_check -a -ss ${song} > /dev/null 2>&1 ] ; then
echo "Song ${song} is good"
else
echo "Song ${song} is bad"
fi
done
Dateinamen mit Leerzeichen & Bash
Re: Dateinamen mit Leerzeichen & Bash
Hi!
Um eben jenen Effekt zu verhindern, verwendet man Anführungszeichen.
Cheers,
GNU/Wolfgang
Um eben jenen Effekt zu verhindern, verwendet man Anführungszeichen.
Cheers,
GNU/Wolfgang
Re: Dateinamen mit Leerzeichen & Bash
Ich weiss nicht, ob Anführungzeichen um "${song}" reichen, da die for-Schleife die Ausgabe des Kommandosubstitions-find wahrscheinlich zersäbelt. Habe es allerdings auch nicht getestet. In solchen Fällen gehe ich anders vor und vermeide lieber, dass die Shell jemals die Dateinamen ungequotet zu Gesicht bekommt:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
find . -name "*.mp3" | while read FILENAME ; do
if mp3_check -a -ss "$FILENAME" > /dev/null 2>&1 ; then
echo "Song \<!--no-->"$FILENAME\<!--no-->" is good"
else
echo "Song \<!--no-->"$FILENAME\<!--no-->" is bad"
fi
done
</font><hr></pre></blockquote>
Die Pipe kombiniert mit while erfüllt den selben Zweck, lässt aber die Shell nicht dran.
Jochen
find . -name "*.mp3" | while read FILENAME ; do
if mp3_check -a -ss "$FILENAME" > /dev/null 2>&1 ; then
echo "Song \<!--no-->"$FILENAME\<!--no-->" is good"
else
echo "Song \<!--no-->"$FILENAME\<!--no-->" is bad"
fi
done
</font><hr></pre></blockquote>
Die Pipe kombiniert mit while erfüllt den selben Zweck, lässt aber die Shell nicht dran.
Jochen
Re: Dateinamen mit Leerzeichen & Bash
Hey Jochen, ich bin dir tief dankbar.
Schon das 2. Mal heute, dass du mir aus der Patsche hilfst.
Philipp
Schon das 2. Mal heute, dass du mir aus der Patsche hilfst.
Philipp
Re: Dateinamen mit Leerzeichen & Bash
Man könnte auch das -exec Kommando von find benutzen.
<pre>
find . -name *.mp3 -exec mp3_check -a -ss {} ;<!--no-->
</pre>
evtl noch mit der if-Abfrage(da ich aber den Rückgabewert von mp3_check nicht kenne, habe ich mal die if-Abfrage weggelassen)
<pre>
find . -name *.mp3 -exec mp3_check -a -ss {} ;<!--no-->
</pre>
evtl noch mit der if-Abfrage(da ich aber den Rückgabewert von mp3_check nicht kenne, habe ich mal die if-Abfrage weggelassen)
Last edited by trinity on 22. Jan 2002 18:27, edited 1 time in total.
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)