Add system checks and folder creations. Make the conversion to mp3 more abstract.
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
# 2025 Hyperling
 | 
					# 2025 Hyperling
 | 
				
			||||||
# Clean up a music library.
 | 
					# Clean up a music library. Improved version of rename_music_files.sh.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Steps:
 | 
					# Steps:
 | 
				
			||||||
# 0) Ensure an OLD folder exists, it is what will be refactored.
 | 
					# 0) Ensure an OLD folder exists, it is what will be refactored.
 | 
				
			||||||
@@ -10,20 +10,70 @@
 | 
				
			|||||||
#    - Name parent folder as "${YEAR} - ${ALBUM}" if both exist, otherwise just one or the other "${YEAR}${ALBUM}".
 | 
					#    - Name parent folder as "${YEAR} - ${ALBUM}" if both exist, otherwise just one or the other "${YEAR}${ALBUM}".
 | 
				
			||||||
#    - Name grandparent folder as "${ARTIST} - ${GENRE}" if both exist, otherwise "${ARTIST}${GENRE}".
 | 
					#    - Name grandparent folder as "${ARTIST} - ${GENRE}" if both exist, otherwise "${ARTIST}${GENRE}".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# TODO List
 | 
					# TODO list:
 | 
				
			||||||
# - Organize tracks by Artist + Album folders.
 | 
					# - Organize tracks by Artist + Album folders.
 | 
				
			||||||
# - Name parent folder as "$YEAR - $ALBUM" if both exist, otherwise just one or the other.
 | 
					# - Name parent folder as "$YEAR - $ALBUM" if both exist, otherwise just one or the other.
 | 
				
			||||||
# - Name grandparent folder as ARTIST if it exists, otherwise GENRE. 
 | 
					# - Name grandparent folder as ARTIST if it exists, otherwise GENRE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# If we are in OLD, go up one level.
 | 
					## Facts and Variables ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROG="$(basename -- "${BASH_SOURCE[0]}")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FAIL=".$PROG.exit-error"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OLD="`pwd`/OLD"
 | 
				
			||||||
 | 
					NEW="`pwd`/NEW"
 | 
				
			||||||
 | 
					INT="`pwd`/INTERIM"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Checks and Setup ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# System Packages #
 | 
				
			||||||
 | 
					echo "- Checking if necessary tools are installed."
 | 
				
			||||||
 | 
					function needed_progs {
 | 
				
			||||||
 | 
						cat <<- EOF
 | 
				
			||||||
 | 
							ffmpeg
 | 
				
			||||||
 | 
							exiftool
 | 
				
			||||||
 | 
						EOF
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					needed_progs | while read prog; do
 | 
				
			||||||
 | 
						if [[ -z "`which $prog`" ]]; then
 | 
				
			||||||
 | 
							echo "ERROR: $prog not found, please install."
 | 
				
			||||||
 | 
							touch .$PROG.exit-error
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					if [[ -e .$PROG.exit-error ]]; then
 | 
				
			||||||
 | 
						rm -rf .$PROG.exit-error
 | 
				
			||||||
 | 
						exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo "  - Tools are available."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Old Directory #
 | 
				
			||||||
 | 
					echo "- Checking whether OLD directory exists."
 | 
				
			||||||
if [[ "`pwd`"== */OLD ]]; then
 | 
					if [[ "`pwd`"== */OLD ]]; then
 | 
				
			||||||
 | 
						echo "  - We are in the folder, moving up a directory."
 | 
				
			||||||
  cd ..
 | 
					  cd ..
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ ! -d OLD ]]; then
 | 
					if [[ ! -d OLD ]]; then
 | 
				
			||||||
  echo "ERROR: Could not find a folder named 'OLD', please create it and add your library there."
 | 
						echo "ERROR: Could not find a folder named 'OLD'."
 | 
				
			||||||
 | 
						echo "       Please create it and add your library there."
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					echo "  - Folder exists appropriately."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Other Directories #
 | 
				
			||||||
 | 
					echo "- Ensuring working directories NEW and INTERIM exist."
 | 
				
			||||||
 | 
					mkdir -pv $NEW $INT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Convert Media ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "- Convert all files to mp3."
 | 
				
			||||||
 | 
					find "$OLD" ! -name "*".mp3 | while read file; do
 | 
				
			||||||
 | 
						ffmpeg -nostdin -hide_banner -loglevel quiet -i "$file" "$file".converted.mp3
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					echo "  - Done creating mp3s."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Transform Media ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "- Moving INTERIM files to NEW."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Convert m4a's to mp3's."
 | 
					echo "- Copying OLD files to NEW."
 | 
				
			||||||
ls *.m4a | while read m4a; do ffmpeg -nostdin -hide_banner -loglevel quiet -i "$m4a" "$m4a".mp3; done
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user