Ich habe meine mp3/ogg-Datein in einem Verzichnisbaum in der Form /<pfad zum Verzeichnis>/<Anfangsbuchstabe der Band>/<Band>/<Album>[/<CD1,2,...>]
In einem anderen Verzeichnis sollen Playslists der Form <Band> - <Album>[ - CD1,2,..].m3u erstellt werden.
Dazu lasse ich eine Schleife über alle Verzeichnisse laufen, wobei ich Leerzeichen substituieren muss, da die for-Schleife das Leerzeichen als Seperator benutzt. In der Schleife müssen dann die Leerzeichen zurücksubstituiert werden.
Dann wird gecheckt, ob dieses Verzeichnis mp3 oder ogg-Files enthält und eine Playlist erstellt. Dann wird geprüft, ob alles geklappt hat.
Zum Schluss wird eine kleine Statistik ausgegeben.
Vorraussetzungen: keine ungewöhnlichen (bash, find, sed)
#!/bin/bash
# search and output path
media_path=/media/Mp3
m3u_path=.
# init some counters
c_error=0
c_m3u=0
c_m3udamag=0
c_lost=0
c_all=0
c_ok=0
c_dirs=0
for i in `find $media_path -type d | sed "s/ /%%blank%%/g"`; do
path=`echo $i | sed "s/%%blank%%/ /g"`;
[ `echo $path | grep -c "$media_path/ "` -eq 1 ] &&
{
echo "omitting $path..."
} || {
files=`find "$path" -maxdepth 1 -iname '*.mp3' -o -iname '*.ogg' | grep -c ""`
[ $files -gt 0 ] &&
{
echo "found $files files in $path..."
filename=`echo $path | sed "s:$media_path/./::" | sed "s:/: - :g" | sed "s:_: :g"` &&
{
filename="$m3u_path/$filename.m3u"
echo ">>> creating $filename..."
echo "#EXTM3U" > "$filename"
find "$path" -maxdepth 1 -iname '*.mp3' -o -iname '*.ogg' | sort >> "$filename"
c_m3u=$(($c_m3u+1))
echo -n ">>> checking file..."
c_count=1
for j in `cat "$filename" | grep -v -e "^#" | sed "s/ /%%blank%%/g"`; do
file=`echo $j | sed "s/%%blank%%/ /g"`
[ -e "$file" ] &&
{
echo -n "$c_count "
c_ok=$(($c_ok+1))
} || {
echo -e "nLOST FILE: $file"
c_lost=$(($c_lost+1))
}
c_count=$(($c_count+1))
c_all=$(($c_all+1))
done
echo
} || {
echo "FAILED: could not parse $path!"
c_error=$(($c_error+1))
}
} || {
echo "omitting empty path $path..."
}
}
c_dirs=$(($c_dirs+1))
done
echo "done - processed $c_dirs directories, created $c_m3u m3u-files, linked $c_all files, $c_lost files lost, $c_ok files ok, $c_error strange errors"
eingereicht durch BlackStar