Dateinamen mit Leerzeichen & Bash

Post Reply
Message
Author
aebi
Posts: 41
Joined: 02. Dec 1999 10:32
Location: Kastanienbaum

Dateinamen mit Leerzeichen & Bash

#1 Post by aebi »

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

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: Dateinamen mit Leerzeichen & Bash

#2 Post by bakunin »

Hi!

Um eben jenen Effekt zu verhindern, verwendet man Anführungszeichen.

Cheers,
GNU/Wolfgang

Jochen

Re: Dateinamen mit Leerzeichen & Bash

#3 Post by Jochen »

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

aebi
Posts: 41
Joined: 02. Dec 1999 10:32
Location: Kastanienbaum

Re: Dateinamen mit Leerzeichen & Bash

#4 Post by aebi »

Hey Jochen, ich bin dir tief dankbar.
Schon das 2. Mal heute, dass du mir aus der Patsche hilfst.

Philipp

trinity
Posts: 821
Joined: 12. Oct 2001 10:04

Re: Dateinamen mit Leerzeichen & Bash

#5 Post by trinity »

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)
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)

Post Reply