#!/bin/bash # ---------------------------------- # Configuration des chemins et du fichier de log # ---------------------------------- ORG_PATH="/home/diabolino2/downloads/qbittorrent" FINAL_PATH="/home/diabolino2" LOG_FILE="/home/diabolino2/torrentend_debug.log" BIN_PATH="/home/diabolino2/bin" # ---------------------------------- # Couleurs pour l'affichage (facultatif) # ---------------------------------- VERT="\033[0;32m" BLEU="\033[1;34m" NORMAL="\033[0;39m" # ---------------------------------- # Lecture des arguments # ---------------------------------- file="$1" original_file="$file" # ---------------------------------- # Fonction de log simplifiée # ---------------------------------- log() { echo "$1" >> "$LOG_FILE" } log "-------------------------------" log "$(date): Script exécuté" log "Base filename: $file" log "DEBUT DE TRAITEMENT" # ---------------------------------- # Nettoyage du répertoire : suppression des samples et renommage des espaces # ---------------------------------- clean_dir() { # Supprime tous les répertoires ou fichiers avec "sample" (n'importe quelle casse) find "$1" -maxdepth 1 -iname '*sample*' -exec rm -rf {} + # Renommage des espaces rename 's/ /_/g' "$1"/* 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 # ---------------------------------- sanitize_name() { local filepath="$1" local filename="$(basename "$filepath")" local ext="${filename##*.}" local name="${filename%.*}" name="$(remove_accents "$name")" name="${name// /.}" # Espace → underscore (change en point si tu veux ".") name=$(echo "$name" | sed 's/[^A-Za-z0-9._-]//g') # Supprime tout sauf lettre/chiffre/point/underscore/tiret printf "%s.%s" "$name" "$ext" } # ---------------------------------- # Traitement des .mkv uniquement # ---------------------------------- process_mkv() { local src="$1" dst="$2" local out="$(sanitize_name "$src")" copieorg "$src" "$dst/$out" $BIN_PATH/postauto add "$dst/$out" echo -e "${BLEU}OK:${NORMAL} $out ajouté" log "$src -> $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 # On va gérer le cas fichier/dossier if [ -f "$file" ]; then log "Fichier trouvé à la racine: $file" files_mkv=("$file") files_nfo=() [ "${file##*.}" = "nfo" ] && files_nfo=("$file") elif [ -d "$file" ]; then log "Dossier trouvé à la racine: $file" clean_dir "$file" rar_present=$(find "$file" -maxdepth 3 -type f -iname "*.rar" | head -n1) sfv_present=$(find "$file" -maxdepth 3 -type f -iname "*.sfv" | head -n1) if [[ -n "$rar_present" && -n "$sfv_present" ]]; then log "RAR et SFV trouvés dans $file, exécution de scene." /home/diabolino2/bin/scene "$file" exit 0 fi mapfile -d '' files_mkv < <(find "$file" -maxdepth 3 -type f -iname '*.mkv' -print0 | sort -z) mapfile -d '' files_nfo < <(find "$file" -maxdepth 3 -type f -iname '*.nfo' -print0) else found="" for tdir in *.torrent; do if [ -d "$tdir/$file" ]; then found="$tdir/$file" break elif [ -f "$tdir/$file" ]; then found="$tdir/$file" break fi done if [ -n "$found" ]; then file="$found" log "Info : $original_file non trouvé à la racine, utilisation de $file" if [ -d "$file" ]; then clean_dir "$file" rar_present=$(find "$file" -maxdepth 3 -type f -iname "*.rar" | head -n1) sfv_present=$(find "$file" -maxdepth 3 -type f -iname "*.sfv" | head -n1) if [[ -n "$rar_present" && -n "$sfv_present" ]]; then log "RAR et SFV trouvés dans $file, exécution de scene." /home/diabolino2/bin/scene "$file" exit 0 fi mapfile -d '' files_mkv < <(find "$file" -maxdepth 3 -type f -iname '*.mkv' -print0 | sort -z) mapfile -d '' files_nfo < <(find "$file" -maxdepth 3 -type f -iname '*.nfo' -print0) elif [ -f "$file" ]; then files_mkv=("$file") files_nfo=() [ "${file##*.}" = "nfo" ] && files_nfo=("$file") fi else log "ERREUR : $original_file introuvable ni à la racine ni dans un dossier .torrent" exit 1 fi fi # Traitement des mkv trouvés for mkv in "${files_mkv[@]}"; do process_mkv "$mkv" "$FINAL_PATH" done # Traitement des nfo trouvés for nfo in "${files_nfo[@]}"; do upload_nfo "$nfo" done log "FIN DE TRAITEMENT" log "-------------------------------" exit 0