- correctif fonctions git
This commit is contained in:
parent
70986e7447
commit
c209b6451c
|
|
@ -0,0 +1,205 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ==========================================
|
||||
# Fonctions utilitaires
|
||||
# ==========================================
|
||||
|
||||
echo "AVANT D UTILISER VOIR LE PB DU FAIT QUE CA FAIT A LA SUITE AU LIEU DE DOUBLER LES NUM EXISTANT"
|
||||
echo "Ex E01 => E01-E02 / E02 => E03-E04 / E04 => E07-E08 actuellement E05-E06"
|
||||
exit
|
||||
|
||||
# Extrait le nom de la série depuis un nom de fichier.
|
||||
# Exemple :
|
||||
# "Adventure Time - S02E01.mkv" -> "Adventure Time"
|
||||
extract_series_name() {
|
||||
local filename="$1"
|
||||
local basename="${filename%.*}"
|
||||
|
||||
if [[ "$basename" =~ ^(.+)[[:space:]]-[[:space:]]S[0-9]{1,2}E[0-9]{1,3} ]]; then
|
||||
echo "${BASH_REMATCH[1]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Extrait le numéro de saison depuis un nom de fichier.
|
||||
# Exemple :
|
||||
# "Adventure Time - S02E01.mkv" -> "2"
|
||||
extract_season() {
|
||||
local filename="$1"
|
||||
|
||||
if [[ "$filename" =~ [Ss]([0-9]{1,2})[Ee][0-9]{1,3} ]]; then
|
||||
# Supprime les zéros initiaux (02 -> 2)
|
||||
echo $((10#${BASH_REMATCH[1]}))
|
||||
fi
|
||||
}
|
||||
|
||||
# Retourne la valeur si tous les éléments sont identiques.
|
||||
# Sinon retourne une chaîne vide.
|
||||
get_uniform_value() {
|
||||
local values=("$@")
|
||||
local first="${values[0]}"
|
||||
|
||||
[ -z "$first" ] && return 1
|
||||
|
||||
for value in "${values[@]}"; do
|
||||
[ "$value" != "$first" ] && return 1
|
||||
done
|
||||
|
||||
echo "$first"
|
||||
}
|
||||
|
||||
# Demande une valeur non vide à l'utilisateur.
|
||||
# Si une valeur par défaut est fournie, Entrée seule l'utilise.
|
||||
prompt_required() {
|
||||
local label="$1"
|
||||
local default="$2"
|
||||
local value
|
||||
|
||||
while true; do
|
||||
if [ -n "$default" ]; then
|
||||
read -rp "$label [$default] : " value
|
||||
value="${value:-$default}"
|
||||
else
|
||||
read -rp "$label : " value
|
||||
fi
|
||||
|
||||
if [ -n "$value" ]; then
|
||||
echo "$value"
|
||||
return
|
||||
fi
|
||||
|
||||
echo "Cette valeur est obligatoire."
|
||||
done
|
||||
}
|
||||
|
||||
# Génère le nouveau nom de fichier.
|
||||
generate_filename() {
|
||||
local index="$1"
|
||||
local original_file="$2"
|
||||
|
||||
local extension="${original_file##*.}"
|
||||
local ep1=$((index * 2 - 1))
|
||||
local ep2=$((index * 2))
|
||||
|
||||
printf "%s - S%02dE%02d-E%02d.%s" \
|
||||
"$SERIE" "$SAISON" "$ep1" "$ep2" "$extension"
|
||||
}
|
||||
|
||||
# Demande confirmation.
|
||||
confirm() {
|
||||
local response
|
||||
read -rp "Continuer ? [y/N] : " response
|
||||
[[ "$response" =~ ^[Yy]$ ]]
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# Recherche des fichiers
|
||||
# ==========================================
|
||||
|
||||
shopt -s nullglob
|
||||
FILES=( *.* )
|
||||
|
||||
if [ ${#FILES[@]} -eq 0 ]; then
|
||||
echo "Aucun fichier trouvé dans : $(pwd)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# Détection automatique
|
||||
# ==========================================
|
||||
|
||||
SERIES_FOUND=()
|
||||
SEASONS_FOUND=()
|
||||
|
||||
for file in "${FILES[@]}"; do
|
||||
series="$(extract_series_name "$file")"
|
||||
season="$(extract_season "$file")"
|
||||
|
||||
[ -n "$series" ] && SERIES_FOUND+=("$series")
|
||||
[ -n "$season" ] && SEASONS_FOUND+=("$season")
|
||||
done
|
||||
|
||||
DEFAULT_SERIE="$(get_uniform_value "${SERIES_FOUND[@]}")"
|
||||
DEFAULT_SAISON="$(get_uniform_value "${SEASONS_FOUND[@]}")"
|
||||
|
||||
# ==========================================
|
||||
# Informations de détection
|
||||
# ==========================================
|
||||
|
||||
echo "Répertoire courant : $(pwd)"
|
||||
echo "Nombre de fichiers trouvés : ${#FILES[@]}"
|
||||
echo
|
||||
|
||||
if [ -z "$DEFAULT_SERIE" ]; then
|
||||
echo "Le nom de série n'a pas pu être détecté de manière uniforme."
|
||||
else
|
||||
echo "Nom de série détecté : $DEFAULT_SERIE"
|
||||
fi
|
||||
|
||||
if [ -z "$DEFAULT_SAISON" ]; then
|
||||
echo "Le numéro de saison n'a pas pu être détecté de manière uniforme."
|
||||
else
|
||||
echo "Saison détectée : $DEFAULT_SAISON"
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# ==========================================
|
||||
# Saisie utilisateur
|
||||
# ==========================================
|
||||
|
||||
SERIE="$(prompt_required "Nom de la série" "$DEFAULT_SERIE")"
|
||||
SAISON="$(prompt_required "Numéro de saison" "$DEFAULT_SAISON")"
|
||||
|
||||
# Validation numérique
|
||||
if ! [[ "$SAISON" =~ ^[0-9]+$ ]]; then
|
||||
echo "Le numéro de saison doit être un entier positif."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# Aperçu
|
||||
# ==========================================
|
||||
|
||||
FIRST_FILE="${FILES[0]}"
|
||||
FIRST_NEW_NAME="$(generate_filename 1 "$FIRST_FILE")"
|
||||
|
||||
echo
|
||||
echo "Exemple de renommage :"
|
||||
echo " '$FIRST_FILE'"
|
||||
echo " ->"
|
||||
echo " '$FIRST_NEW_NAME'"
|
||||
echo
|
||||
|
||||
# ==========================================
|
||||
# Confirmation
|
||||
# ==========================================
|
||||
|
||||
if ! confirm; then
|
||||
echo "Opération annulée."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# Renommage
|
||||
# ==========================================
|
||||
|
||||
echo
|
||||
echo "Renommage en cours..."
|
||||
|
||||
INDEX=1
|
||||
|
||||
for file in "${FILES[@]}"; do
|
||||
new_name="$(generate_filename "$INDEX" "$file")"
|
||||
|
||||
if [ -e "$new_name" ]; then
|
||||
echo "Ignoré (fichier existant) : '$new_name'"
|
||||
else
|
||||
mv -- "$file" "$new_name"
|
||||
echo "'$file' -> '$new_name'"
|
||||
fi
|
||||
|
||||
((INDEX++))
|
||||
done
|
||||
|
||||
echo
|
||||
echo "Terminé."
|
||||
Loading…
Reference in New Issue