Last active
August 12, 2025 07:34
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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