Add files via upload

This commit is contained in:
Ssyleric
2025-02-24 17:07:43 +01:00
committed by GitHub
parent 0b5107cbb8
commit 35943c0634
2 changed files with 221 additions and 1 deletions

View File

@@ -1 +1,86 @@
# serie-renamer # 📌 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

135
addyear2serie.sh Normal file
View File

@@ -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é !"