#!/bin/bash -x # ---------------------------------- # Configuration des chemins et du fichier de log # ---------------------------------- ORG_PATH="/home/**********/downloads/rtorrent" FINAL_PATH="/home/************" LOG_FILE="/home/**********/postprocess.log" BIN_PATH="/home/***********/bin" # ---------------------------------- # Couleurs pour l'affichage (facultatif) # ---------------------------------- VERT="\033[0;32m" BLEU="\033[1;34m" NORMAL="\033[0;39m" # ---------------------------------- # Lecture des arguments # ---------------------------------- file="$1" #etiq="$2" # ---------------------------------- # Fonction de log simplifiée # ---------------------------------- log() { echo "$1" >> "$LOG_FILE" } log "-------------------------------" log "$(date): Script exécuté" log "Base filename: $file" log "DEBUT DE TRAITEMENT" # ---------------------------------- # N'exécute que pour les torrents étiquetés AUTO # ---------------------------------- #[[ "$etiq" != "AUTO" ]] && exit 0 # ---------------------------------- # Nettoyage du répertoire : suppression des samples et renommage des espaces # ---------------------------------- clean_dir() { local dir="$1" # 1. on active le glob insensible à la casse shopt -s nocaseglob # 2. on supprime tout ce qui contient "sample" (toutes casses) rm -rf "${dir}"/*sample* # 3. on désactive la fonctionnalité pour ne pas impacter le reste du script shopt -u nocaseglob # 4. on renomme les espaces en underscore rename 's/ /_/g' "${dir}"/* 2>/dev/null || true } # ---------------------------------- # Copie en hardlink # ---------------------------------- copieorg() { cp -rl "$1" "$2" } # ---------------------------------- # Suppression des accents # ---------------------------------- remove_accents() { echo "$1" | iconv -f utf8 -t ascii//TRANSLIT } # ---------------------------------- # Nettoyage du nom de fichier : # - suppression du titre d'épisode # - suppression de (TOS) # - gestion des apostrophes + Majuscule suivante # - conversion espaces/underscores en points # - conservation uniquement des segments utiles # - dernier segment préfixé par un tiret # ---------------------------------- sanitize_name() { # Extraction du nom de base et de l'extension local filepath="$1" local filename="$(basename "$filepath")" local ext="${filename##*.}" local name="${filename%.*}" # Si le nom de fichier est entièrement en minuscules, on utilise le dossier parent if [[ "$name" == "${name,,}" ]]; then local parent="$(basename "$(dirname "$filepath")")" name="$(remove_accents "$parent")" fi # Translit accents name="$(remove_accents "$name")" # Normalisation des séparateurs name="${name//[ _]/.}" # Découpage en segments IFS='.' read -ra parts <<< "$name" local total=${#parts[@]} local keep=() local i j k # Parcours des segments pour trouver e.g. S01E02 for ((i=0;i $dst/$out" } # ---------------------------------- # Upload des .nfo avec renommage à la volée # ---------------------------------- upload_nfo() { local src="$1" # Génère un nom nettoyé pour le NFO local fn="$(sanitize_name "$src")" # Envoie le nfo sous le nom nettoyé sans renommer le fichier sur disque curl -s -k -L -m 60 \ -F "nfo=@${src};filename=${fn}" \ -F upload=upload "https://unfr.pw/nfos-upload" log "UPLOAD NFO $src -> $fn" } # ---------------------------------- cd "$ORG_PATH" || exit 1 clean_dir "$file" mapfile -d '' mkv_files < <(find "$file" -maxdepth 3 -type f -iname '*.mkv' -print0 | sort -z) for mkv in "${mkv_files[@]}"; do process_mkv "$mkv" "$FINAL_PATH" done mapfile -d '' nfo_files < <(find "$file" -maxdepth 3 -type f -iname '*.nfo' -print0) for nfo in "${nfo_files[@]}"; do upload_nfo "$nfo" done log "FIN DE TRAITEMENT" log "-------------------------------" exit 0