As you may recall I prefer to prepend my track names with the album number in the case of multiple disc albums (box sets, double-albums, &c). I have some rather large (30 CD) sets and am lazy didn’t want to run my other script 30 times, so I wrote this new version to deal with matters recursively.
(There is now an improved version of this script available here. The new version allows the user to select file extensions while the version on the page below is specifically written for FLAC files.)
(Use the pointy brackets button to copy and paste.)
## #!/bin/bash # Prepend album number before track numbers automatically and recursively # by JamesIsIn from JamesIsIn.com # Do something nice today. ## gather information # obtain directory in which to work echo echo echo "This script changes FLAC file names under a containing folder which you supply." echo "It assumes that your discs are separated into numbered sub-folders." echo "As such sub-folder names should be 01, 02, and so forth." echo echo "Example: \"01/01 – Track Name.flac\" becomes \"01.01 – Track Name.flac\"" echo read -e -p "I will require the path to the containing folder: " if [ -d "$REPLY" ]; then printf "\n\nI have confirmed this is a directory.\n" directory="$REPLY" else printf "\n\nI cannot find this directory.\n\n" echo "$REPLY" exit 1 fi read -p "Press <ENTER> to continue (ctrl-c will abort)." echo ## do the work # find all two-digit numerically-named sub-directories under root directory find "$directory" -type d -name [0-9][0-9] > /tmp/whyme echo # parse disc folders into array declare -a discfind let i=0 while read discline; do discfind[$i]=$discline # extract disc number from folder path disc=$( basename "$discline" ) discpath=$( dirname "$discline" ) # change file names in sub folder for filepath in "/$discpath/$disc/"*.[Ff][Ll][Aa][Cc]; do filename=$( basename "$filepath" ) mv "$discpath/$disc/$filename" "$discpath/$disc.$filename" echo $filename changed done ((i++)) done < /tmp/whyme rm /tmp/whyme exit ##
There are a couple of assumptions that this script makes (which are consistent with my preferences).
For instance, I like my file names to run album number dot track number (01.01 – Track Name.flac). As such I name the containing folders each a two-digit number based on the disc number (disc number three goes into a folder called 03). The script then uses that folder name or disc number (since they are now the same) as the prepend for the file name.
I hope that helps to make your life a little better.
Thanks for stopping.