#!/bin/bash #----------------------------------------------------------------------------------------------------------------------------------- # # Album Renum # # 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_renum" declare -g HELP="usage: [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [-f | --first_number ] [-d | --number_of_digit ] " declare -g SOURCE_DIR="" declare -g TARGET_DIR="" declare -g FIRST_NUMBER="1" declare -g NUMBER_OF_DIGIT="2" declare -g MODE="DEFAULT" declare -g VERBOSE="FALSE" declare -g DRY_RUN="FALSE" #----------------------------------------------------------------------------------------------------------------------------------- # Version Print #----------------------------------------------------------------------------------------------------------------------------------- ar_version_print() { version_print } #----------------------------------------------------------------------------------------------------------------------------------- # Help Print #----------------------------------------------------------------------------------------------------------------------------------- ar_help_print() { ar_version_print help_print } #----------------------------------------------------------------------------------------------------------------------------------- # Arg Parse #----------------------------------------------------------------------------------------------------------------------------------- ar_args_parse() { tmp_args=$(getopt -o f:d:ThVv --long first_number:,number_of_digit:,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 -f|--first_number) shift; FIRST_NUMBER="$1"; shift;; -d|--number_of_digit) shift; NUMBER_OF_DIGIT="$1"; shift;; # Mode switches -T|--test) MODE="TEST"; shift;; -h|--help) MODE="EXIT"; ar_help_print; shift;; -V|--version) MODE="EXIT"; ar_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 [[ "${#}" != "2" ]] then if [[ "${#}" -lt "2" ]] then echo_error "Not enough args!" else echo_error "Too many args!" fi MODE="EXIT" ar_help_print else SOURCE_DIR="$1" TARGET_DIR="$2" fi fi } #----------------------------------------------------------------------------------------------------------------------------------- # Main #----------------------------------------------------------------------------------------------------------------------------------- ar_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}] First_Number: [${FIRST_NUMBER}] Number_Of_Digit: [${NUMBER_OF_DIGIT}]" if [[ ! -d "${TARGET_DIR}" ]] then echo_error "Target directory doesn't exist !" exit -1 fi i="${FIRST_NUMBER}" for file in "${SOURCE_DIR}"/*@(.flac|.mp3) do j=$(printf "%0${NUMBER_OF_DIGIT}d" "${i}") target_file="${TARGET_DIR}/$(basename "${file}" | sed -e "s/^[0-9]*-/$j-/")" cmd_exec cp "${file}" "${target_file}" mt_tag_delete "${target_file}" "TRACKNUMBER" mt_tag_delete "${target_file}" "DISCNUMBER" mt_tag_delete "${target_file}" "DISCTOTAL" mt_tag_write "${target_file}" "TRACKNUMBER" "${j}" i=$((i+1)) done