Hi Johannes,
On Wed, Mar 27, 2002 at 13:37:38 +0100, Johannes Richter wrote:
Ich versuche ein Bash Skript zum extrahieren von Titel und Interpreten aus mp3 Dateinamen zu schreiben. Das ganze gschieht in einer for Schleife :
for line in $(ls -l $1); do
Wie Du schon richtig sagst, macht diese Schleife Probleme bei Dateinamen mit Leerzeichen. Ausserdem liefert "ls -l" nicht nur die Liste der Dateinamen, sondern auch Rechte, Link Count, Owner... Also unbrauchbar als Liste fuer die for-Anweisung.
Interpret=${linepp-*.mp3}
^^^^^^^^^^^^^^^ In welcher Manpage hast Du das nachgelesen? Dieses Konstrukt schneidet jedenfalls nicht das Muster "-*.mp3" von linepp ab. Wie es wirklich funktioniert, kannst Du in der bash-Manpage unter "Parameter Expansion" nachlesen. Dich interessieren besonders die Zeichen '#' und '%'.
done
Wie muss ich an der Stelle quoten damit bash das unterlässt ? Oder gibt es noch bequemere Wege mit Dateinamen als Strings umzugehen?
Am besten gar keine Liste verwenden, si dass IFS nicht zum Zuge kommt. Hier ist eine Alternative:
#!/bin/bash ls -1 "$1" | while read linepp do Interpret=${linepp%%-*} echo "Interpret: $Interpret" Song=${linepp##*-} Song=${Song%.mp3} echo "Song: $Song" done
Das Skript nenne ich mal mp3_info. Jetzt ein Test:
$ ls priv/TMP The Trolls-We quote ugly.mp3
$ ./mp3_info priv/TMP Interpret: The Trolls Song: We quote ugly
bye, Chris