#!/bin/bash #----------------------------------------------------------------------------------------------------------------------------------- # # Album Convert # # Copyright (C) 2016-2026 Arnaud G. GIBERT # mailto:arnaud@rx3.net # # This is free software: you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; If not, see # . # #----------------------------------------------------------------------------------------------------------------------------------- #----------------------------------------------------------------------------------------------------------------------------------- # Includes #----------------------------------------------------------------------------------------------------------------------------------- : "${RX3_LIB_DIR:=/usr/lib/rx3}" . "${RX3_LIB_DIR}/music_tools.bash" #----------------------------------------------------------------------------------------------------------------------------------- # Global Variables #----------------------------------------------------------------------------------------------------------------------------------- declare -g VERSION="1.0.0" declare -g NAME="album_merge" declare -g HELP="usage: [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] " declare -g SOURCE_DIR="" declare -g TARGET_DIR="" declare -g ALBUM_NAME="" declare -g PREFIX="" declare -g MODE="DEFAULT" declare -g VERBOSE="FALSE" declare -g DRY_RUN="FALSE" #----------------------------------------------------------------------------------------------------------------------------------- # Version Print #----------------------------------------------------------------------------------------------------------------------------------- am_version_print() { version_print } #----------------------------------------------------------------------------------------------------------------------------------- # Help Print #----------------------------------------------------------------------------------------------------------------------------------- am_help_print() { am_version_print help_print } #----------------------------------------------------------------------------------------------------------------------------------- # Arg Parse #----------------------------------------------------------------------------------------------------------------------------------- am_args_parse() { tmp_args=$(getopt -o ThVv --long test,help,version,verbose -n "${NAME}" -- "$@") if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "${tmp_args}" while true do case "$1" in # Options # Mode switches -T|--test) MODE="TEST"; shift;; -h|--help) MODE="EXIT"; am_help_print; shift;; -V|--version) MODE="EXIT"; am_version_print; shift;; # Global options -v|--verbose) VERBOSE="TRUE"; shift;; # End of options --) shift; break;; *) echo "args_parse internal error [$1] !"; exit 1;; esac done if [[ "${MODE}" != "EXIT" ]] then if [[ "${#}" != "4" ]] then if [[ "${#}" -lt "4" ]] then echo_error "Not enough args!" else echo_error "Too many args!" fi MODE="EXIT" am_help_print else SOURCE_DIR="$1" TARGET_DIR="$2" ALBUM_NAME="$3" PREFIX="$4" fi fi } #----------------------------------------------------------------------------------------------------------------------------------- # Main #----------------------------------------------------------------------------------------------------------------------------------- am_args_parse "$@" if [[ ${MODE} == "EXIT" ]] then exit 0 else if [[ ${MODE} == "TEST" ]] then DRY_RUN="TRUE" fi fi echo_error "${NAME}: Mode: [${MODE}] Verbose: [${VERBOSE}] Source_Dir: [${SOURCE_DIR}] Target_Dir: [${TARGET_DIR}] Album_Name: [${ALBUM_NAME}] Prefix: [${PREFIX}]" for file in "${SOURCE_DIR}"/*@(.flac|.mp3) do id="$(basename $file | sed -e "s/-.*//")" target_file="${TARGET_DIR}/${PREFIX}$(basename $file)" cmd_exec cp "${file}" "${target_file}" mt_tag_delete "${target_file}" "ALBUM" mt_tag_write "${target_file}" "ALBUM" "${ALBUM_NAME}" mt_tag_delete "${target_file}" "TRACKNUMBER" mt_tag_write "${target_file}" "TRACKNUMBER" "${PREFIX}${id}" done