Skip to content

Instantly share code, notes, and snippets.

@bonnebulle
Last active August 12, 2025 07:34
Show Gist options
  • Select an option

  • Save bonnebulle/749b879f693a689dab10b836c2cb9745 to your computer and use it in GitHub Desktop.

Select an option

Save bonnebulle/749b879f693a689dab10b836c2cb9745 to your computer and use it in GitHub Desktop.
batch add Album+Artist format=="eartiste name - album of the year" to flac/mp3, bypass if folder already scanned
#!/bin/zsh
# GIST
# https://gist.github.com/bonnebulle/749b879f693a689dab10b836c2cb9745/edit
# DEP (also use)
# https://gist.github.com/bonnebulle/8a245ecbc4acee7ef49108e64cedba66
# USE
# FILES NAMING FOR BEST : "artist - title name.mp3"
# bmp_mp3_albums.sh ./music_folder/any/ --force # default checkin if an .ok/.ok_album file exists, if yes, bypass folder (--force will check anyway)
# bmp_mp3_albums.sh ./music_folder/album_name/ # search album name w/ parent folder (is a sub)
# bmp_mp3_albums.sh ./music_folder/playlist_vrac/ --force --same # search album name in/ current parent folder (no album sub)
DEBUG_PLS="no" # FORCE SEARCH+ADD ALBUM from MusicBrainz yes(/no)
MUSIC_DIR="$1"
echo $MUSIC_DIR
sleep 1
if [[ $2 == "--force" ]];then
BYPASS_IF_OK_EXISTE="false"
else
BYPASS_IF_OK_EXISTE="true" # true == if .ok_album existe, bypass
fi
find "$MUSIC_DIR" -type d -print | while read -r dir; do
dir="$(echo "$dir" | xargs)"
echo
echo "============================="
echo "============================="
echo
echo $dir
echo
echo "BYPASS_IF_OK_EXISTE == $BYPASS_IF_OK_EXISTE"
# Vérifie si le fichier .ok_album existe déjà
if [[ (-e "$dir/.ok_album") && ($BYPASS_IF_OK_EXISTE == "true") ]]; then
echo "_________"
echo "_________"
echo "Le fichier .ok_album existe déjà dans..."
echo $dir
echo "_________"
echo "_________"
echo
else
TOTAL_AL=$(find "$dir" -maxdepth 1 -type f \( -name "*.mp3" -o -name "*.flac" \) | wc -l)
COUNT_AL=0
find "$dir" -maxdepth 1 -type f \( -name "*.mp3" -o -name "*.flac" \) | while read -r file; do
COUNT_AL=$((COUNT_AL+1))
if [[ $3 == "--same" ]];then
BASENAME=$(basename "$file")
# BASENAME_ALT=$(basename "$(dirname "$file")")
else
BASENAME=$(basename "$(dirname "$file")")
fi
# echo $file
# echo $BASENAME
# sleep 10000
ALBUM=$(
### GO
eyeD3 "$file" | grep -i 'album:' | sed 's/album: //'
)
ARTIST=$(
### GO
eyeD3 "$file" | grep -i 'artist:' | sed 's/artist: //'
)
TITLE=$(
### GO
eyeD3 "$file" | grep -i 'title:' | sed 's/title: //'
)
if [[ (-n "$ALBUM") && ($BYPASS_IF_OK_EXISTE == "true") ]]; then
echo
echo "$ALBUM ( album )"
# echo $BASENAME
echo
else
ALBUM_NAME=$(echo "$BASENAME" | sed 's/^[^-]*- *//')
ARTIST_NAME=$(echo "$BASENAME" | sed 's/ -.*$//')
fname=${BASENAME:t}
fname_no_ext=${fname%.*}
TITLE_NAME=$(echo "$fname_no_ext" | sed -E 's/^[^-]*-[[:space:]]*//')
echo
echo "$BASENAME ( file )"
echo "$TITLE_NAME ( titre )"
echo "$ARTIST_NAME ( artist )"
# echo "$ALBUM_NAME ( album )"
# sleep 1
if [[ (($TITLE == "") && ($TITLE_NAME != "")) || ($ALBUM == "favorites_306446955") ]]; then
echo "------ ADD -- $TITLE_NAME ( TITLE_NAME )"
### GO
eyeD3 --title "$TITLE_NAME" "$file"
fi
echo "--------"
echo "--------"
echo "--------" $ALBUM "---- album"
echo "--------"
echo "--------"
# if [[ ($ALBUM == "") || ($ALBUM == "favorites_306446955") || ($ALBUM =~ $'\n') || ($DEBUG_PLS == "yes") ]];then
if [[ ($ALBUM == "") || ($DEBUG_PLS == "yes") ]];then
zsh -e /usr/bin/vb_perso/bpm_not__find_album_brain.sh -f $file
fi
if [[ $3 == "--same" ]];then
echo
echo "---same -- BASENAME_ALT == $BASENAME_ALT"
elif [[ -n $ALBUM_NAME ]]; then ### SI dans le namefile
echo "$ALBUM_NAME ( alb )"
if [[ $3 == "--same" ]];then
echo "----same --- no change album"
elif [[ ($ALBUM == "") || $ALBUM == "favorites_306446955" ]]; then
if [[ ($ALBUM == "favorites_306446955") && ($ALBUM_NAME == "favorites_306446955") ]];then
eyeD3 --album "" "$file"
else
### GO
eyeD3 --album "$ALBUM_NAME" "$file"
fi
echo
echo "$ALBUM_NAME ( DONE )"
echo
else
echo "$ALBUM ( UN CHANGED ) ---- album"
fi
else
echo "--- $ALBUM_NAME is empty"
fi
### ARTISTS ####
if [[ -n "$ARTIST_NAME" ]]; then ### SI dans le namefile
if [[ ($ARTIST == "") || $ARTIST == "favorites_306446955" ]]; then
### GO
eyeD3 --artist "$ARTIST_NAME" "$file"
echo
else
echo "$ARTIST ( UN CHANGED ) ---- artiste"
fi
if [[ $3 != "--same" ]];then
echo "$ARTIST_NAME ( ARTISTE )"
fi
# else
# echo "--- $ARTIST_NAME is empty"
fi
fi
# if [[ ($TITLE == "") && ($TITLE_NAME != "") ]]; then
# echo "----- NO TITLE"
# echo "------ ADD -- $TITLE_NAME ( TITLE_NAME )"
# ### GO
# eyeD3 --title "$TITLE_NAME" "$file"
# # sleep 1000
# else
# echo "---- ELSE TITLE"
# echo $TITLE
# fi
echo
echo
echo
echo
# echo
# echo
# echo
# echo
# echo
done
if [[ $COUNT_AL = $TOTAL_AL ]]; then
touch "$dir/.ok_album"
echo
echo "_________"
echo "_________"
echo "_________"
echo "_________"
echo "Fichier .ok_album créé dans $dir"
echo "_________"
echo "_________"
echo "_________"
echo "_________"
echo
sleep 1
fi
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment