37 lines
924 B
Bash
Executable File
37 lines
924 B
Bash
Executable File
#!/bin/sh
|
|
# Musmaster: find and play music in any directory
|
|
# Depends on find and fzf
|
|
# Created by Luxferre in 2026, released into the public domain
|
|
|
|
[ -z "$PLAYER" ] && PLAYER='mpg123'
|
|
[ -z "$FTYPES" ] && FTYPES='mp3 MP3'
|
|
|
|
mdir="$1"
|
|
[ -z "$mdir" ] && mdir='.'
|
|
set --
|
|
for ext in $FTYPES; do
|
|
if [ $# -eq 0 ]; then
|
|
set -- -name "*.$ext"
|
|
else
|
|
set -- "$@" -o -name "*.$ext"
|
|
fi
|
|
done
|
|
|
|
cd "$mdir"
|
|
echo "Indexing music..."
|
|
muslist="$(find . -type f \( "$@" \))"
|
|
dirlist="$(find . -type f \( "$@" \) -print0 | xargs -0 dirname | sort -u)"
|
|
muslist="$(printf '%s\n%s' "$muslist" "$dirlist" | sort -u)"
|
|
echo "Indexing complete"
|
|
|
|
while true; do
|
|
src="$(printf '%s\nQuit' "$muslist" | fzf --tac -0 -1)"
|
|
[ -d "$src" ] && src="$(find "$src" -type f \( "$@" \) | sort -u)"
|
|
[ "$src" = 'Quit' ] && break
|
|
if [ -n "$src" ]; then
|
|
printf '%s\n' "$src" | while read -r track; do
|
|
$PLAYER "$track"
|
|
done
|
|
fi
|
|
done
|