scripts/shufflizer/shufflizer.sh
2024-01-08 14:38:13 +01:00

216 lines
6.1 KiB
Bash
Executable file

#!/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