#!/usr/bin/sh -e # Turns a nested hierarchy of music files into a flat one find "${1:-.}" -regex '.*\.\(mp3\|ogg\|wav\|aac\|wma\|flac\|alac\)' -type f | \ while read line; do newline=$(echo $line | sed -E -e 's|[[:space:]]?-[[:space:]]?|_|g' \ -e 's/ */ /g') o=$(echo -n $(dirname "$newline") | sed -e 's|\./||g' -e 's|/| - |g') first=$(echo -n $(basename "$newline") | cut -d " " -f 1) if $(echo $first | grep -Eq '^[0-9]+$'); then o="$o $(echo -n "- $first -")" num=2 else o="$o -" num=1 fi o="$o $(echo -n $(basename "$newline") | cut -d " " -f ${num}-)" cp -v "$line" "${2:-.}/$o" done