#!/bin/sh # this scripts makes tagging flac files quick and easy! die() { printf "\nusage: tagit [OPTION] files\n options: -a: artist -A: album artist -t: song title -T: album title -n: track number -N: auto number tracks -d: release date -D: disc number -g: genre -c: content group -o: organisation -s: show all tags -S: scan replay gain -r: apply replay gain -e: embed cover art -R: remove excess tags\n" && exit } while getopts "a:A:t:T:n:d:D:g:c:o:e:NsSrRh" o; do case "${o}" in a) artist="${OPTARG}";; A) aartist="${OPTARG}";; t) title="${OPTARG}";; T) album="${OPTARG}";; n) tnum="${OPTARG}";; N) anum="true";; d) date="${OPTARG}";; D) dnum="${OPTARG}";; g) genre="${OPTARG}";; c) content="${OPTARG}";; o) org="${OPTARG}";; s) show="true";; S) scan="true";; r) rgain="true";; e) cover="${OPTARG}";; R) remove="true";; h|*) die;; esac done shift $((OPTIND - 1)) if [ -n "$anum" ]; then [ -z "$(find "$PWD" -type f -name '*.flac' )" ] && echo "no flac files found to number!" && exit echo "auto numbering tracks..." i=1 find "$PWD" -type f -name '*.flac' | sort -n | while read -r f; do metaflac --preserve-modtime --remove-tag=TRACKNUMBER --set-tag=TRACKNUMBER="$i" "$f" i=$((i+1)) done [ -z "$1" ] && exit fi [ -z "$1" ] && echo "no input files specified!" && die for f in "$@"; do [ ! -f "$f" ] && echo "invalid file: $f" && die; done [ "${1##*.}" != "flac" ] && echo "only flac files can be specified!" && die [ -n "$show" ] && metaflac --show-all-tags "$@" && exit [ -n "$scan" ] && metaflac --scan-replay-gain "$@" && exit if [ -n "$cover" ]; then [ ! -f "$cover" ] && echo "invalid file: $cover" && die metaflac --preserve-modtime --remove --block-type=PICTURE,PADDING --dont-use-padding "$@" metaflac --preserve-modtime --import-picture-from="$cover" "$@" fi tag="metaflac --preserve-modtime" [ -n "$artist" ] && tag="${tag} --remove-tag=ARTIST --set-tag=ARTIST=\"$artist\"" [ -n "$aartist" ] && tag="${tag} --remove-tag=ALBUMARTIST --set-tag=ALBUMARTIST=\"$aartist\"" [ -n "$title" ] && tag="${tag} --remove-tag=TITLE --set-tag=TITLE=\"$title\"" [ -n "$album" ] && tag="${tag} --remove-tag=ALBUM --set-tag=ALBUM=\"$album\"" [ -n "$tnum" ] && tag="${tag} --remove-tag=TRACKNUMBER --set-tag=TRACKNUMBER=\"$tnum\"" [ -n "$dnum" ] && tag="${tag} --remove-tag=DISCNUMBER --set-tag=DISCNUMBER=\"$dnum\"" [ -n "$date" ] && tag="${tag} --remove-tag=DATE --set-tag=DATE=\"$date\"" [ -n "$genre" ] && tag="${tag} --remove-tag=GENRE --set-tag=GENRE=\"$genre\"" [ -n "$content" ] && tag="${tag} --remove-tag=CONTENTGROUP --set-tag=CONTENTGROUP=\"$content\"" [ -n "$org" ] && tag="${tag} --remove-tag=ORGANIZATION --set-tag=ORGANIZATION=\"$org\"" [ -n "$rgain" ] && tag="${tag} --add-replay-gain" [ -n "$remove" ] && tag="${tag} --remove-all-tags-except=ALBUM=ARTIST=TITLE=CONTENTGROUP=GENRE=ALBUMARTIST=ENCODER=DISCNUMBER=REPLAYGAIN_TRACK_GAIN=REPLAYGAIN_TRACK_PEAK=REPLAYGAIN_ALBUM_GAIN=REPLAYGAIN_ALBUM_PEAK=DATE=ORGANIZATION=TRACKNUMBER" for i in "$@"; do tag="${tag} \"$i\""; done echo "applying tags..." && eval $tag && echo "done!"