Here is a Shell script which can automatically set mp3 tags to multiple folders in a GNU/Linux environment.
The script will set the following tags :
Mp3 albums need to be structured like this : DIRECTORY_TO_WORK/BANDS/YEAR - ALBUM_NAME/01 - first_track.mp3
#! /bin/sh # auto-mp3tags.sh version 1.0 # 2016.10.30 shebangthedolphins.net first version #--------------------------------------------------- # this script automatically set mp3/id3v2 tags # needs id3v2 to work # you need to respect this path : DIRECTORY_TO_WORK/BANDS/YEAR - ALBUM_NAME/01 - first_track.mp3 #--------------------------------------------------- ## If no arguments found option_found=0 usage() { echo "usage: ./auto-mp3tags.sh -d [DIRECTORY_TO_WORK]" echo "ex : ./auto-mp3tags.sh -d /mnt/USB/" echo "" exit 3 } while getopts d: OPTNAME; do case "$OPTNAME" in d) ROOT="$OPTARG" option_found=1 ;; *) usage ;; esac done if [ "$option_found" -eq "0" ] || [ -d "ROOT" ] ; then usage fi FOLDER=$(echo "$ROOT" | sed 's/\/$//') for ARTIST in "$FOLDER"/* do ARTIST=$(expr "$ARTIST" : '.*/\(.*\)') cd "$FOLDER/$ARTIST" for DATE_ALBUM in * do if [ -d "$DATE_ALBUM" ]; then YEAR=$(expr "$DATE_ALBUM" : '\([0-9]\{4\}\).*') ALBUM=$(expr "$DATE_ALBUM" : '[0-9]\{4\}\s-\s\(.*\)') cd "$DATE_ALBUM" for MP3 in *mp3 do TITLE=$(expr "$MP3" : '^[0-9]\{2\} - \(.*\)\.mp3') NUM=$(expr "$MP3" : '^\([0-9]\{2\}\) - .*') echo "id3v2 --artist \""$ARTIST"\" --year "$YEAR" --album \""$YEAR - $ALBUM"\" --track "$NUM" --song \""$TITLE"\" \""$MP3"\"" echo "$PWD" id3v2 --artist "$ARTIST" --year "$YEAR" --album "$YEAR - $ALBUM" --track "$NUM" --song "$TITLE" "$MP3" done sync #Synchronize cached writes to persistent storage cd "$FOLDER/$ARTIST" fi done done
Contact :