2 changed files with 102 additions and 0 deletions
@ -0,0 +1,101 @@
@@ -0,0 +1,101 @@
|
||||
#!/bin/bash |
||||
|
||||
#Создан: Ср 19 фев 2020 21:59:29 |
||||
#Изменён: Чт 20 фев 2020 00:45:38 |
||||
|
||||
# Requirements: |
||||
# - mid3v2 from media-libs/mutagen |
||||
|
||||
rstc="\033[00m" |
||||
green="\033[1;32m" |
||||
yellow="\033[1;33m" |
||||
blue="\033[1;34m" |
||||
|
||||
REGEXP=".*/(.*)/(.*) \[(.*)\]/(.*)/(.*?) - (.*)/(.*?) - (.*)\.([[:alnum:]]{3})$" |
||||
|
||||
usage() { |
||||
echo "$(basename "$0") - simple mp3 tagger." |
||||
echo |
||||
echo "USAGE: $(basename "$0") [file] [options]" |
||||
echo |
||||
echo "The filenames should be in the format \"[...]/GENRE/ARTIST [COUNTRY]/TYPE/YEAR - ALBUM/TRACK - TITLE.FORMAT\"" |
||||
echo |
||||
echo "Command line arguments:" |
||||
echo " -h --help - show this help" |
||||
echo " -v --verbose - show updating tags" |
||||
echo " -d --dry - run without tags saving" |
||||
} |
||||
|
||||
tag_file() { |
||||
file="$1" |
||||
|
||||
[[ $file =~ $REGEXP ]] |
||||
|
||||
printf "${blue}%s[%02d/%02d] ${yellow}Tagging the file «%s»${rstc}\n" "$INDENT" "$((++CURRENT_TRACK))" "$TRACKS" "$file" |
||||
|
||||
GENRE="${BASH_REMATCH[1]}" |
||||
ARTIST="${BASH_REMATCH[2]}" |
||||
YEAR="${BASH_REMATCH[5]}" |
||||
ALBUM="${BASH_REMATCH[6]}" |
||||
TRACK="${BASH_REMATCH[7]}" |
||||
TITLE="${BASH_REMATCH[8]}" |
||||
|
||||
if [ -n "$VERBOSE" ]; then |
||||
printf "%s\t Genre: %s | Artist: %s |" "$INDENT" "$GENRE" "$ARTIST" |
||||
printf "Year: %s | Album: %s |" "$YEAR" "$ALBUM" |
||||
printf "Track: %s | Title: %s\n" "$TRACK" "$TITLE" |
||||
fi |
||||
|
||||
if [ -z "$DRY_RUN" ]; then |
||||
mid3v2 --genre="$GENRE" --artist="$ARTIST" --year="$YEAR" \ |
||||
--album="$ALBUM" --track="$TRACK" --song="$TITLE" \ |
||||
"$file" |
||||
fi |
||||
} |
||||
|
||||
tag_directory() { |
||||
TRACKS=$(find "$1" -name '*.mp3' -print | wc -l) |
||||
|
||||
printf "${green}> %s/${rstc}\n" "$1" |
||||
INDENT=" " |
||||
|
||||
|
||||
find "$1" -name '*.mp3' | while read -r file; do tag_file "$file"; done |
||||
} |
||||
|
||||
tag() { |
||||
if [[ -d "$1" ]]; then |
||||
tag_directory "$1" |
||||
elif [[ "$1" =~ \.mp3 ]]; then |
||||
tag_file "$1" |
||||
fi |
||||
} |
||||
|
||||
if (( $# == 0 )); then |
||||
usage |
||||
exit 1 |
||||
fi |
||||
|
||||
QUEUE=() |
||||
|
||||
while [[ $# -gt 0 ]]; do |
||||
key="$1" |
||||
|
||||
case $key in |
||||
-h|--help) usage; exit 0; shift;; |
||||
-v|--verbose) VERBOSE=1; shift;; |
||||
-d|--dry) DRY_RUN=1; VERBOSE=1; shift;; |
||||
*) QUEUE+=("$1"); shift;; |
||||
esac |
||||
done |
||||
|
||||
set -- "${QUEUE[@]}" |
||||
|
||||
INDENT= |
||||
TRACKS="$#" |
||||
CURRENT_TRACK=0 |
||||
|
||||
for item in "${QUEUE[@]}"; do |
||||
tag "$(realpath "$item")" |
||||
done |
||||
|
Loading…
Reference in new issue