#!/bin/bash # Includes #----------------------------------------------------------------------------------------------------------------------------------- . /usr/global/lib/music.bash # System Constants #----------------------------------------------------------------------------------------------------------------------------------- AML_NAME="album_metadata_load" AML_VERSION="$Name: album_metadata_load-1_0_0-1 $" # Print Version #----------------------------------------------------------------------------------------------------------------------------------- function version_print() { echo ${AML_VERSION} | sed -e 's/.*: //' -e 's/-/ /' -e 's/_/\./g' -e 's/\$$//' } # Prin Help #----------------------------------------------------------------------------------------------------------------------------------- function help_print() { echo "${AML_NAME} [-h | --help] | [-V | --version] | [-T | --test] [-v | --verbose] [-c | --clean] " } # Arg Parse #----------------------------------------------------------------------------------------------------------------------------------- function args_parse() { mode="default" verbose="false" clean="false" source_dir="" target_dir="" metadata_file="" tmp_args=$(getopt -o ThVvc --long test,help,version,verbose,clean -n "${AML_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"; help_print; shift;; -V|--version) mode="exit"; version_print; shift;; # Global options -v|--verbose) verbose="true"; shift;; -c|--clean) clean="true"; shift;; # --) shift; break;; *) echo "args_parse internal error [$1] !"; exit 1;; esac done if [[ "${mode}" != "exit" ]] then if [[ "${#}" != "3" ]] then if [[ "${#}" -lt "3" ]] then echo "Not enough args!" else echo "Too many args!" fi mode="exit" help_print else source_dir="$1" target_dir="$2" metadata_file="$3" fi fi } # Main #----------------------------------------------------------------------------------------------------------------------------------- args_parse "$@" if [[ ${mode} == "exit" ]] then exit 0 else if [[ ${mode} == "test" ]] then dry_run=true else dry_run=false fi fi echo "mode: [${mode}] verbose: [${verbose}] clean: [${clean}] source_dir: [${source_dir}] target_dir: [${target_dir}] metadata_file: [${metadata_file}]" 1>&2 tagtab_alloc echo "Reading MetaData..." tagtab_load "${metadata_file}" "DEFAULT" nb_track=${track_id} echo "Nb track found: ${nb_track}" track_id=1 find "${source_dir}" -maxdepth 1 -name '*.flac' -o -name '*.mp3' | sort | ( while read track_file do # title="${tagtab["${track_id},TITLE"]}" tag_get title "${track_id}" "TITLE" suffix="${track_file##*.}" target_file="$(printf "%02d" ${track_id})-${title}.${suffix}" target_file="$(fix_file_name "${target_file}" "")" target_file="${target_dir}/$(fix_file_name "${target_file}" "")" echo "Copying ${track_file} into ${target_file}" cmd="cp \"${track_file}\" \"${target_file}\"" exec_cmd "${cmd}" if [[ "${clean}" == "true" ]] then tag_save "${target_file}" "${track_id}" "CLEAN" else tag_save "${target_file}" "${track_id}" "NOCLEAN" fi track_id=$((${track_id} + 1)) done )