#!/bin/bash # config structures declare -A \ destinationchannels \ destinationfat32compat \ destinationcopymime \ destinationformat \ destinationfrequency \ destinationid \ destinationloss \ destinationmaxbps \ destinationnormalize \ destinationpath \ destinationquality \ destinationrename \ destinationnoresample \ destinationrenamepath \ destinationskipmime \ || { echo "Check your Bash version. You need >= 4.0" >&2 exit $EBASHVERS } declare -r \ DOCDIR=./doc \ LIBDIR=./lib \ SHAREDIR=./share declare -r \ exampleconf=$DOCDIR/example.cfg \ schema=$SHAREDIR/schema.sql \ \ oldIFS="$IFS" LC_ALL=C shopt -s extglob for function in "$LIBDIR"/*/* do source "$function" done while getopts 'urn' opt do case $opt in u) update=1 ;; r) rename=1 ;; n) pretend=1 ;; esac done getConfig openDatabase (( update )) && getFiles echo ' SELECT source_files.id, source_files.filename, mime_types.mime_text FROM source_files INNER JOIN mime_types ON source_files.mime_type = mime_types.id ; SELECT "AtOM:NoMoreFiles"; ' >&3 renameFile() { echo $'\t'"${filename%.*}$extension" if ! (( pretend )) then mv "$sourcepath/$filename" "$sourcepath/${filename%.*}$extension" Update source_files filename "${filename%.*}$extension" fi } while read -u4 line do if [[ $line == AtOM:NoMoreFiles ]] then break fi fileid=${line%%|*} rest="${line#*|}|" filename=${rest%%|*} rest=${rest#*|} mimetype=${rest%%|*} rest=${rest#*|} case "$mimetype" in 'audio/mpeg') if [[ ${filename##*.} != mp3 ]] then extension=.mp3 echo "$filename: MP3 ($extension)" (( rename )) && renameFile fi ;; 'application/ogg vorbis') if [[ ${filename##*.} != ogg ]] then extension=.ogg echo "$filename: Ogg Vorbis ($extension)" (( rename )) && renameFile fi ;; 'application/ogg opus') if [[ ${filename##*.} != opus ]] then extension=.opus echo "$filename: Opus ($extension)" (( rename )) && renameFile fi ;; 'audio/x-flac') if [[ ${filename##*.} != flac ]] then extension=.flac echo "$filename: FLAC ($extension)" (( rename )) && renameFile fi ;; esac done closeDatabase