65 lines
2.0 KiB
Bash
Executable File
65 lines
2.0 KiB
Bash
Executable File
#!/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
|
|
|
|
IFS=$SAVEIFS
|