#!/bin/bash # T0MuX - copyleft # Definition du nombre total de .mp3 dans le dossier du script total=`ls *.mp3 2>/dev/null | wc -l` # Definition variables couleurs normal="\e[0m" B="\e[97m" L="\e[94m" # Couleur du logo color=0 # Fonction couleur aleatoire color() { oldcolor="$color" while : do col=`echo $((1 + RANDOM % 12))` case $col in 1) color="\e[91m";; 2) color="\e[92m";; 3) color="\e[93m";; 4) color="\e[94m";; 5) color="\e[95m";; 6) color="\e[96m";; 7) color="\e[31m";; 8) color="\e[32m";; 9) color="\e[33m";; 10) color="\e[34m";; 11) color="\e[35m";; 12) color="\e[36m";; esac if [ "$oldcolor" != "$color" ]; then break; fi done } # LOGO logo() { echo -e "$L __ __ __ __ " echo -e "$L | \/ | \ \ / / " echo -e "$L | \ / |_ _ \ V / " echo -e "$L | |\/| | | | | > < " echo -e "$L | | | | |_| |/ . \ " echo -e "$L |_| |_|\__,_/_/ \_\ " echo echo -e "$L _____ _ __ __ _ _" echo -e "$L / ____| | / _|/ _| (_)" echo -e "$L | (___ | |__ _ _| |_| |_| |_ _______ _ __" echo -e "$L \___ \| '_ \| | | | _| _| | |_ / _ \ '__|" echo -e "$L ____) | | | | |_| | | | | | | |/ / __/ |" echo -e "$L |_____/|_| |_|\__,_|_| |_| |_|_/___\___|_|" echo } # YIPEE KAY YAY LOGO yipee_kay_yay() { color;C1=$color;color;C2=$color;color;C3=$color echo -e "$C1 __ _______ _____ ______ ______ $C2 _ __ __ __$C3 __ __ __ __" echo -e "$C1 \ \ / /_ _| __ \| ____| ____|$C2 | |/ / /\\\\\ \ / /$C3 \ \ / //\\\\\ \ / /" echo -e "$C1 \ \_/ / | | | |__) | |__ | |__ $C2 | ' / / \\\\\ \_/ / $C3 \ \_/ // \\\\\ \_/ / " echo -e "$C1 \ / | | | ___/| __| | __| $C2 | < / /\ \\\\\ / $C3 \ // /\ \\\\\ / " echo -e "$C1 | | _| |_| | | |____| |____ $C2 | . \ / ____ \| | $C3 | |/ ____ \| | " echo -e "$C1 |_| |_____|_| |______|______|$C2 |_|\_\/_/ \_\_| $C3 |_/_/ \_\_| " echo -e "$C1 ..motherfucker :D" echo -e "$normal" } # Défini la fonction unshuffle unshuffle() { # Compteur à 0 pour la progression count=0 if [ ! -f .shuffled ] then logo echo "ATTENTION, je n'arrive pas à savoir si le dossier courant est shufflized." echo "Si vous déshufflizez (du verbe déshufflizer donc) un dossier n'étant pas shufflizé," echo "chaque première partie de chaque nom de fichier sera perdue. C'est quand même pas bien cool." read -n1 -p "Voulez vous quand même le déshufflizer ? Je vous aurais prévenu. (o/N)" ch if [ "$ch" = "" ]; then ch=N; fi case $ch in n|N) exit;; o|O) echo;echo "Unshufflize it motherfucker !";; *) echo;echo "MAUVAIS CHOIX"; exit;; esac fi rm .shuffled 2> /dev/null # Save et adaptation variable IFS pour faire un for tenant compte des epsaces SAVEIFS=$IFS IFS=$(echo -en "\n\b") for filename in $(ls *.mp3) do newfilename=`echo $filename | cut -d\ -f2-` color count=$((count+1)) progress=`echo ${count}*100/${total} | bc` echo -e "${B}[${progress}%] ${color}$filename ${B}-> ${color}$newfilename${normal}" mv "$filename" "$newfilename" done # Restauration variable IFS IFS=$SAVEIFS } # Défini la fonction shuffle shuffle() { # Si fichier .shuffled présent, procéder à la déshufflization (si si, ce mot existe vraiment) if [ -f .shuffled ]; then unshuffle; fi # Compteur à 0 pour la progression count=0 # Save et adaptation variable IFS pour faire un for tenant compte des epsaces SAVEIFS=$IFS IFS=$(echo -en "\n\b") case $type in shuffle) ls_cmd=$(ls *.mp3 | shuf);; sort1) ls_cmd=$(ls -t --time=birth);; esac for filename in $ls_cmd do # Renomme en ajoutant nbr au début du filename color count=$((count+1)) progress=`echo ${count}*100/${total} | bc` echo -e "${B}[${progress}%] $color$filename ${B}-> $color$count $filename$normal" if [ $total -ge 100 ] then if [ $count -lt 10 ]; then mv "$filename" "00$count $filename"; fi if [ $count -ge 10 ] && [ $count -lt 100 ]; then mv "$filename" "0$count $filename"; fi if [ $count -ge 100 ]; then mv "$filename" "$count $filename"; fi fi if [ $total -lt 100 ] then if [ $count -lt 10 ]; then mv "$filename" "0$count $filename"; fi if [ $count -ge 10 ]; then mv "$filename" "$count $filename"; fi fi done # Restauration variable IFS IFS=$SAVEIFS # On pose un fichier pour tester sa présence à la prochaine exécution touch .shuffled yipee_kay_yay } sort1() { SAVEIFS=$IFS IFS=$(echo -en "\n\b") # Réalisé avec l'aide de ChatGPT counter=1 # Récupérer la liste des fichiers triés par date de création (du plus récent au plus vieux) files=($(ls -t --time=birth)) # Parcourir les fichiers et les renommer for file in "${files[@]}" do if [[ -f $file ]]; then # Formatage du numéro avec des zéros à gauche (ex: 001, 002, 010, etc.) number=$(printf "%03d" $counter) # Extraire l'extension du fichier (s'il y en a une) extension="${file##*.}" # Renommer le fichier en ajoutant le numéro au début mv "$file" "$number $file.$extension" counter=$((counter+1)) fi done IFS=$SAVEIFS } # Vérifie si le dossier contient des mp3 puis menu clear logo if [ $total -eq 0 ] then echo -e "\e[91mATTENTION : je ne trouve aucun mp3 dans ce répertoire." echo -e "Veuillez exécuter le script depuis un répertoire qui en contient$normal" echo exit fi echo -e "${B}S${L}hufflize it !" echo -e "S${B}o${L}rt it ! (newer to older)" echo -e "${B}U${L}nshufflize" echo -e "${B}E${L}xit" echo echo "Notez que si le dossier est déjà shufflizé et que vous choisissez de le" echo "reshufflizer (ce mot est parfaitement français d'ailleurs), le dossier" echo "sera tout d'abord unshufflizé avant d'être à nouveau shufflizé." echo read -n 1 -p "Choix> " ch case $ch in s|S) type=shuffle; shuffle && exit;; o|O) type=sort1; shuffle && exit;; u|U) unshuffle && echo -e "\nUnshuflized !\n" && exit;; q|Q|e|E) echo && exit;; *) echo -e "\n\e[91mChoix incorrect.\e[0m" && exit;; esac