diff --git a/rename_music_files.sh b/rename_music_files.sh old mode 100644 new mode 100755 index 5aeb446..0d4c9cd --- a/rename_music_files.sh +++ b/rename_music_files.sh @@ -1,7 +1,7 @@ #!/bin/bash # 2024-06-07 C.Greenwood # Rename all files in a music library based on metadata. -# Uses the format "[Track] [Title].mp3" +# Uses the format "[Track]. [Title].mp3" # TBD Remove all the stuff from AddTrackToTitle. @@ -41,7 +41,6 @@ function usage { Parameters: -h : Help, display the usage and exit succesfully. - -u : Undo, attempt to un-fix files which have had the normal script run against them. Place this file at the root of your music destined for a flash drive and run it without any parameters. It will dive through all folders and convert your MP3's to have the Track# in the Title. @@ -71,12 +70,10 @@ function error { ## Validations ## # Check for parameters. -while getopts ":hu" opt; do +while getopts ":h" opt; do case "$opt" in h) usage 0 ;; - u) UNDO="$TRUE" - ;; *) error "Operator $OPTARG not recognized." 6 ;; esac @@ -86,42 +83,6 @@ done if [[ ! `which exiftool` ]]; then error "exiftool not found" 2 fi -if [[ ! `which ffmpeg` ]]; then - error "exiftool not found" 2 -fi -if [[ ! `which bc` ]]; then - error "bc not found" 2 -fi -if [[ ! `ls /usr/bin/time` ]]; then - error "/usr/bin/time not found" 2 -fi - -# Make sure the user understands they're going to change their music's title. -typeset -l change -read -p "Please acknowledge you are OK with irreversibly modifying your music's metadata. [y/N] " change -if [[ $change != "y" ]]; then - echo -e "\nThank you for your honesty. Come back when you feel more confident. :)\n" - usage 0 -fi - -# Make sure the user has a backup of the music different than the folder they're running this in. -typeset -l backup -read -p 'Please ensure you have a backup. There is no warranty for this program! [y/N] ' backup -if [[ $backup != "y" ]]; then - echo -e "\nThank you for your honesty. Please backup your music and come back soon. :)\n" - usage 0 -fi - -printf 'User has provided permission to alter data.\nMoving forward in 5... ' -sleep 1 -printf '4... ' -sleep 1 -printf '3... ' -sleep 1 -printf '2... ' -sleep 1 -printf '1... \n' -sleep 1 ## Main ## @@ -138,15 +99,6 @@ time find $DIR -name "*${EXT}" | while read file; do echo -e "\n$file" - # Skip file if it's already correct. - if [[ "$UNDO" == "$FALSE" && "$file" == *"$ADD"* ]]; then - echo "Already fixed, skipping." - continue - elif [[ "$UNDO" == "$TRUE" && "$file" != *"$ADD"* ]]; then - echo "Already unfixed, skipping." - continue - fi - # Retrieve and clean the Track# track="" # Get raw value @@ -170,40 +122,11 @@ time find $DIR -name "*${EXT}" | while read file; do title="`echo $title`" echo "Title=$title" - # Skip file if title is already changed. - if [[ "$UNDO" == "$FALSE" && "$title" == "$track"* ]]; then - echo "Title already contains Track, skipping." - continue - elif [[ "$UNDO" == "$TRUE" && "$title" != "$track"* ]]; then - echo "Title already missing Track, skipping." - continue - fi - - # Create the new file with the correct Title - new_title="" - new_file="" - if [[ "$UNDO" == "$FALSE" ]]; then - new_title="${track}. ${title}" - new_file="${file//$EXT/$ADD$EXT}" - else - new_title="${title/${track}. }" - new_file="${file//$ADD/}" - fi + # Create the new file with the correct filename. + new_filename="$track. $title$EXT" if [[ ! -z "$track" && ! -z "$title" ]]; then - echo "Creating '`basename "$new_file"`' with Title '$new_title'." - AV_LOG_FORCE_NOCOLOR=1 - /usr/bin/time -f '%e' -o time.txt ffmpeg -nostdin -hide_banner -loglevel quiet -i "$file" -metadata "Title=$new_title" "$new_file" - time=`cat time.txt` - #rm time.txt - ffstatus="$?" - if [[ $ffstatus ]]; then - echo "Success! Completed in $time seconds." - time_count=$(( time_count + 1 )) - total_time=$(echo "$total_time + $time" | bc -l) - avg_time=$(echo "$total_time / $time_count" | bc -l) - else - error "Did something bad happen? ffmpeg returned $ffstatus." 4 - fi + echo "Creating '`basename "$new_filename"`'." + mv -v "$file" "$new_filename" elif [[ -z "$track" && ! -z "$title" ]]; then echo "No Track# found, leaving Title alone." continue @@ -212,22 +135,11 @@ time find $DIR -name "*${EXT}" | while read file; do fi # Confirm the new file exists and remove the old file if so - if [[ -e "$new_file" ]]; then - echo "Removing file..." - rm -v "$file" + if [[ -e "$new_filename" ]]; then + echo "Success!" else - error "$new_file was not created successfully." 5 + error "$new_filename was not created successfully." 5 fi - - # Give an estimate for time remaining. The magic number is to account for non-ffmpeg time. - magic="1.2" - est_guess_total="$( echo "est=(($total - $count) * $avg_time) * $magic; scale=0; est/1" | bc )" - est_guess_secs="$( echo "est=$est_guess_total % 60; scale=0; est/1" | bc )" - est_guess_mins="$( echo "est=($est_guess_total/60) % 60; scale=0; est/1" | bc )" - est_guess_hours="$( echo "est=($est_guess_total/(60*60)); scale=0; est/1" | bc )" - est_guess="$est_guess_hours hour(s) $est_guess_mins minute(s) $est_guess_secs second(s)" - - echo -e "\nFinished $count of $total. Estimated time remaining is $est_guess." done echo -e "\nProcess has completed. Enjoy having your songs in album-order!"