diff --git a/README.md b/README.md index f0f6f8d..5fefab3 100644 --- a/README.md +++ b/README.md @@ -1 +1,86 @@ -# serie-renamer \ No newline at end of file +# 📌 Script de renommage et d'organisation des sĂ©ries TV + +## 📖 Description +Ce script automatise le renommage et l'organisation des dossiers de sĂ©ries TV en se basant sur la base de donnĂ©es **TMDb (The Movie Database)**. Il corrige les noms des dossiers, ajoute +l'annĂ©e de premiĂšre diffusion et fusionne les doublons tout en conservant l'intĂ©gritĂ© des fichiers. + +## 🔍 FonctionnalitĂ©s +✅ Recherche automatique du titre officiel et de l'annĂ©e de diffusion via TMDb. +✅ Renommage des dossiers selon le format **"Nom de la sĂ©rie (AnnĂ©e)"**. +✅ Suppression des prĂ©fixes comme **"Marvel's"** si TMDb utilise un nom diffĂ©rent. +✅ Fusion des dossiers de doublons pour Ă©viter les rĂ©pĂ©titions. +✅ GĂ©nĂ©ration d'un **rapport final** indiquant les dossiers renommĂ©s, fusionnĂ©s et ceux Ă  vĂ©rifier manuellement. + +## ⚙ PrĂ©requis +- **Un NAS Synology ou un serveur Linux** +- **Entware installĂ©** (si utilisĂ© sur un NAS Synology) +- **jq installĂ©** (pour traiter les rĂ©ponses JSON de l'API TMDb) +- **cURL installĂ©** (pour interroger l'API TMDb) + +### 📩 Installation des dĂ©pendances +Sur un systĂšme Debian/Ubuntu : +```sh +sudo apt update && sudo apt install jq curl +``` +Sur un NAS Synology avec Entware : +```sh +opkg update && opkg install jq curl +``` + +## 📂 Structure du rĂ©pertoire +Le script cible un rĂ©pertoire contenant des sĂ©ries : +``` +/volume2/serie/ + ├── Loki (2021)/ + ├── Breaking Bad (2008)/ + ├── Stranger Things (2016)/ + ├── SĂ©rie Ă  vĂ©rifier/ +``` + +## 🚀 Utilisation +### 1ïžâƒŁ Modifier la configuration +Dans le script, adapter la variable `base_dir` : +```bash +base_dir="/volume2/serie" +``` +### 2ïžâƒŁ Lancer le script +```sh +bash rename_series.sh +``` + +## 📊 Rapport final +À la fin du script, un rĂ©sumĂ© des opĂ©rations effectuĂ©es est affichĂ© : +``` +📂 Total des dossiers traitĂ©s : 50 +✍ Dossiers renommĂ©s : 12 +🔄 Dossiers fusionnĂ©s : 5 +⚠ Dossiers Ă  vĂ©rifier manuellement : 3 + +🚹 LISTE DES DOSSIERS À VÉRIFIER : + - Inconnu SĂ©rie 1 + - Another Show (Incorrect) + - Test Series (2019) +✅ Renommage terminĂ© ! +``` + +## 🔧 Personnalisation +- Modifier la **clĂ© API TMDb** si nĂ©cessaire : +```bash +api_key="VOTRE_CLE_API" +``` +- Ajouter d'autres exceptions de renommage dans la fonction `normalize_series_name()`. + +## ❌ Limitations +- Si une sĂ©rie n'est pas trouvĂ©e sur TMDb, elle est ajoutĂ©e Ă  la liste des dossiers Ă  vĂ©rifier. +- Les fichiers vidĂ©o **(.mkv, .avi)** et les mĂ©tadonnĂ©es **(.jpg, .nfo)** sont conservĂ©s. +- **Le script ne supprime aucun fichier**, sauf en cas de fusion de dossiers. + +## ✹ AmĂ©liorations possibles +- Ajout d'un mode **dry-run** pour simuler les modifications avant exĂ©cution. +- CrĂ©ation d'un fichier **log** dĂ©taillĂ© des actions effectuĂ©es. + +--- +✍ **Auteur :** Script personnalisĂ© pour NAS Synology & Linux. +📅 **DerniĂšre mise Ă  jour :** FĂ©vrier 2025 + + diff --git a/addyear2serie.sh b/addyear2serie.sh new file mode 100644 index 0000000..3047629 --- /dev/null +++ b/addyear2serie.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# RĂ©pertoire contenant les sĂ©ries +base_dir="/volume2/serie" + +# ClĂ© API TMDb +api_key="a51e6780dac618cdc12b6e54f2771b45" + +# Variables pour le rapport final +total_folders=0 +renamed_folders=0 +merged_folders=0 +manual_check=0 +manual_list=() + +# Fonction pour obtenir l'annĂ©e de diffusion et le nom correct d'une sĂ©rie sur TMDb +get_tmdb_info() { + local series_name="$1" + local series_id + local tmdb_title + local airdate_year + + echo "🔎 Recherche de la sĂ©rie '$series_name' sur TMDb..." >&2 + + # Rechercher la sĂ©rie + result=$(curl -s --get "https://api.themoviedb.org/3/search/tv" --data-urlencode "api_key=$api_key" --data-urlencode "query=$series_name") + series_id=$(echo "$result" | jq -r '.results[0].id') + tmdb_title=$(echo "$result" | jq -r '.results[0].name') + + if [[ "$series_id" =~ ^[0-9]+$ ]]; then + echo "✅ SĂ©rie trouvĂ©e : $tmdb_title (ID: $series_id)" >&2 + airdate_year=$(curl -s "https://api.themoviedb.org/3/tv/$series_id?api_key=$api_key" | jq -r '.first_air_date' | cut -d'-' -f1) + + if [[ ! "$airdate_year" =~ ^[0-9]{4}$ ]]; then + airdate_year="Inconnu" + fi + + echo "$tmdb_title|$airdate_year" + return + fi + + echo "❌ SĂ©rie non trouvĂ©e sur TMDb." >&2 + echo "Inconnu|Inconnu" +} + +# Fonction pour normaliser les noms +normalize_series_name() { + echo "$1" | sed -E 's/Marvel.s //I' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]//g' +} + +# Dictionnaire pour stocker les sĂ©ries et Ă©viter les doublons +declare -A series_map + +# Lire tous les dossiers et les traiter +find "$base_dir" -mindepth 1 -maxdepth 1 -type d | while IFS= read -r folder_path; do + folder=$(basename "$folder_path") + ((total_folders++)) + + # Exclure certains rĂ©pertoires inutiles + if [[ "$folder" =~ (dump|images|private|snippets|template) ]]; then + echo "đŸš« Ignorer : $folder_path (rĂ©pertoire exclu)" + continue + fi + + echo "📂 Traitement du rĂ©pertoire : $folder_path" + + # Extraction du nom et de l'annĂ©e + if [[ "$folder" =~ \(Recherche ]]; then + series_name=$(echo "$folder" | sed -E 's/ \(Recherche.*//') + current_year="Inconnu" + else + series_name=$(echo "$folder" | sed -E 's/ \([0-9]{4}\)//') + fi + + if [[ "$folder" =~ \(([0-9]{4})\) ]]; then + current_year="${BASH_REMATCH[1]}" + else + current_year="Inconnu" + fi + echo "📌 AnnĂ©e actuelle du rĂ©pertoire : $current_year" + + # RĂ©cupĂ©rer le nom officiel et l'annĂ©e depuis TMDb + tmdb_data=$(get_tmdb_info "$series_name") + tmdb_name=$(echo "$tmdb_data" | cut -d'|' -f1) + tmdb_year=$(echo "$tmdb_data" | cut -d'|' -f2) + + if [[ "$tmdb_name" == "Inconnu" ]]; then + echo "⚠ Impossible de trouver '$series_name' sur TMDb. VĂ©rification manuelle requise." + manual_list+=("$folder") + ((manual_check++)) + continue + fi + + # Construire le nom de dossier correct + new_folder_name="${tmdb_name} (${tmdb_year})" + new_folder_path="$base_dir/$new_folder_name" + + # Renommage si nĂ©cessaire + if [[ "$new_folder_name" != "$folder" ]]; then + echo "🔄 Renommage : '$folder' -> '$new_folder_name'" + mv "$folder_path" "$new_folder_path" + ((renamed_folders++)) + fi + + # VĂ©rification des doublons + normalized_name=$(normalize_series_name "$tmdb_name") + if [[ -n "${series_map[$normalized_name]}" ]]; then + target_folder="${series_map[$normalized_name]}" + echo "🔄 Fusion de '$new_folder_name' -> '$target_folder'" + mv "$new_folder_path"/* "$target_folder" 2>/dev/null + rmdir "$new_folder_path" 2>/dev/null && echo "đŸ—‘ïž Dossier supprimĂ© : $new_folder_path" + ((merged_folders++)) + else + series_map[$normalized_name]="$new_folder_path" + fi +done + +# Affichage du rapport final +echo "" +echo "📊 RAPPORT FINAL :" +echo "------------------------" +echo "📂 Total des dossiers traitĂ©s : $total_folders" +echo "✍ Dossiers renommĂ©s : $renamed_folders" +echo "🔄 Dossiers fusionnĂ©s : $merged_folders" +echo "⚠ Dossiers Ă  vĂ©rifier manuellement : $manual_check" + +if [[ ${#manual_list[@]} -gt 0 ]]; then + echo "" + echo "🚹 LISTE DES DOSSIERS À VÉRIFIER :" + for folder in "${manual_list[@]}"; do + echo " - $folder" + done +fi + +echo "✅ Renommage terminĂ© !"