Add files via upload
This commit is contained in:
87
README.md
87
README.md
@@ -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
135
addyear2serie.sh
Normal 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é !"
|
||||||
Reference in New Issue
Block a user