#!/usr/bin/env sh set -ou pipefail # Generates playlists for all mp3 and flac files in a directory, ignoring itself in the "parent" folder PLAYLIST_FOLDER="/home/default/Music/playlists/mpd" # Playlist folder for mpd PREFIX="music/playlists" # relative links to add to playlists, based on mpd virtual file structure EXTENSIONS=("mp3" "opus" "flac" "m4a" "mkv" "webm") # Disable nullglob and set pattern matching to fix spaces shopt -s nullglob SAVEIFS=$IFS IFS=$(echo -en "\n\b") cd $PLAYLIST_FOLDER || { echo "Could not cd into PLAYLIST_FOLDER"; exit 1; } parent=`basename $PWD` # Delete old generated playlists if [[ -f "*.gen.m3u" ]]; then rm *.gen.m3u fi if [[ -f ".trackNames" ]]; then rm .trackNames fi # For all playlist directories to generate for playlistDir in ../*; do if [[ -d "$playlistDir" ]] && [[ "$playlistDir" != "../$parent" ]]; then # playlist filename needed for mpd playlist=`echo "$playlistDir" | sed "s/^\.\.\///g"` # escaped version of filename needed for bash escaped=`printf '%q\n' "$playlist"` # echo "playlist=$playlist" # echo "escaped=$escaped" # touch file > "$playlist.gen.m3u" # write all files with newlines > .track-names for EXT in ${EXTENSIONS[@]}; do # echo `find "../$playlist" -mindepth 1 -type f -name "*.$EXT" -printf x | wc -c` if [[ `find "../$playlist" -mindepth 1 -type f -name "*.$EXT" -printf x | wc -c` != 0 ]]; then ls -1 ../$escaped/*.$EXT >> .track-names 2> /dev/null # echo `ls -1 ../$playlist/*.$EXT >> 2> /dev/null` fi done # echo `cat .track-names` cat .track-names | while IFS="" read -r song || [ -n "$song" ] ; do unprefixed=`echo "$song" | sed "s/^\.\.\///g"` # echo "$PREFIX/$unprefixed" echo "$PREFIX/$unprefixed" >> "$playlist.gen.m3u" done < .track-names if [[ -f ".track-names" ]]; then rm .track-names fi fi done # Use mpc to update mpd database update-mpd > /dev/null restart-music IFS=$SAVEIFS