• Seedbox
  • Script de Suppression (Hardlinks & Files)

Bonsoir,

je me bat depuis quelques heures maintenant avec mon script de suppression de liens (hardlinks) lors de la suppression d'un torrent.

Mon soucis provient des fichiers ou dossiers avec des caractères spéciaux qu'il faut que j'échappe mais je ne m'y connais pas assez pour comprendre ce que je fais de travers...

en gros, mon script reçoit le chemin brut de décoffrage :
/home/USER/torrents/Le Fichier avec des Caracteres Speciaux
Pour le début je pensais que seuls les espaces allaient me géner donc j'ai chercher et j'ai trouvé cette synthaxe pour insérer les caractères spéciaux :
TORRENTPATH="${TORRENTPATH// /\\ }"
mais après un petit test je suis tombé sur un fichier bien retord avec des [ ou ] ou ( ou ) etc...

du coup j'ai trouvé cette syntaxe :
echo "file"with"quotes( and 'simple').ex" | sed 's/\([\() '\''"]\)/\\\1/g'
quand je la teste avec le fichier concerné, ça fonctionne parfaitement mais je n'arrive pas à intégrer cela dans mon script...

du coup si une âme charitable saurait comment utiliser la syntaxe ci dessus dans mon script je lui en serai très reconnaissant

Voilà mon scrip, désolé c'est de l'artisanal et je suis loin d'être un pro en script linux...
(si vous avez des conseils au passage je suis preneur)
#!/bin/bash

TORRENTPATH=$1
UTILISATEUR="gormson"

#Recuperation de l'inode du torrent supprime
#Traitement différent dans le cas d'un dossier
if [ -d "$TORRENTPATH" ]
then
        #Ecriture de l'ensemble du contenu du dossier dans un fichier tampon
        echo "-------------------------------------------------------------------" >> /home/$UTILISATEUR/.session/inode.log
        echo "Traitement Dossier $TORRENTPATH" >> /home/$UTILISATEUR/.session/inode.log

        #Remplacement des espaces dans le chemin du Torrent
        TORRENTPATH="${TORRENTPATH// /\\ }"

        #Creation d'une variable commande pour gerer les espaces dans les variables
        COMMANDE="ls $TORRENTPATH"
        eval $COMMANDE >> /home/$UTILISATEUR/.session/inodedossier.log

        #Lecture de chaque nom de fichier et traitement
        while read -r ENCOURS; do

                echo "Traitement fichier $ENCOURS" >> /home/$UTILISATEUR/.session/inode.log

                #Remplacement des espaces dans le nom du fichier en cours de traitement
                ENCOURS="${ENCOURS// /\\ }"
                COMMANDE="ls -i $TORRENTPATH/$ENCOURS | sed -e \"s|$TORRENTPATH/$ENCOURS||\""

                INODE=$(eval $COMMANDE)

                #Sauvegarde de l'inode et du nom du fichier correspondant dans un log
                echo "Suppression inode $INODE | fichier $ENCOURS" >> /home/$UTILISATEUR/.session/inode.log

                #Suppresion de tous les fichiers associes
                find /home/ -inum $INODE -exec rm {} \;

                #Verification de la bonne suppression des fichiers
                find /home/ -inum $INODE >> /home/$UTILISATEUR/.session/inodefailed.log

        done < /home/$UTILISATEUR/.session/inodedossier.log

        rm /home/$UTILISATEUR/.session/inodedossier.log

        COMMANDE="ls -id $TORRENTPATH | sed -e \"s|$TORRENTPATH||\""
        INODE=$(eval $COMMANDE)
        echo "Suppresion du Dossier $TORRENTPATH" >> /home/$UTILISATEUR/.session/inode.log
        echo "Suppression inode $INODE | Dossier $TORRENTPATH" >> /home/$UTILISATEUR/.session/inode.log
        find /home/ -inum $INODE -exec rm -R {} \;


        #Verification de la bonne suppression des fichiers
        find /home/ -inum $INODE >> /home/$UTILISATEUR/.session/inodefailed.log

else

        TORRENTPATH="${TORRENTPATH// /\\ }"
        echo "Chemin Propre $TORRENTPATH"

        COMMANDE="ls -i $TORRENTPATH | sed -e \"s|$TORRENTPATH||\""
        INODE=$(eval $COMMANDE)

        #Sauvegarde de l'inode et du nom du fichier correspondant dans un log
        echo "-------------------------------------------------------------------" >> /home/$UTILISATEUR/.session/inode.log
        echo "Suppression inode $INODE | fichier $TORRENTPATH" >> /home/$UTILISATEUR/.session/inode.log

        find /home/ -inum $INODE -exec rm {} \;

        #Verification de la bonne suppression des fichiers
        find /home/ -inum $INODE >> /home/$UTILISATEUR/.session/inodefailed.log
fi
Merci d'avance de votre aide...
Moi je fait ca en php donc j'utilise la fonction fileinode
Certes mais dans mon cas c'est surtout en script que je cherche à faire ça.
mon Script supprime lui aussi les fichiers via leur inode.

Ce qu'il me faudrait c'est surtout pouvoir traiter les noms de fichiers/dossier et leur placer les caractères d'échappement nécessaires.

Bon et bien une âme charitable du forum ubuntu à gentiment pris le temps de me sortir un truc 10x plus simple que ce que je pensais qui était nécessaire...

je mets la chose à dispo de fait ^^
#!/bin/sh

UTILISATEUR="gormson"

echo "-------------------------------------------------------------------" >> /home/$UTILISATEUR/.session/inode.log
for inode in $(ls -i "$1" | cut -d" " -f1)
do
        echo "Traitement Inode $inode | Fichier $(find /home/ -inum $inode)" >> /home/$UTILISATEUR/.session/inode.log
        find /home/ -inum $inode -exec rm "{}" \;
done

if [ -d "$1" ]
then
        echo "-------> Traitement Dossier $1" >> /home/$UTILISATEUR/.session/inode.log
        rmdir "$1"
fi
echo "-------------------------------------------------------------------" >> /home/$UTILISATEUR/.session/inode.log
Sympas l'idée le script il supprime quoi en fait ? Les restes de fichiers ou les fichiers qui ne sont plus liée à un torrent sur rtorrent ?
Pas besoin d'échapper tu peux mettre entre guillemet le chemin (si j'ai bien compris ton problème)
En fait dans ma configuration Rtorrent download dans le dossier torrents
une fois terminés, un symlink est créé dans un dossier termines
sur ces fichier filebot créé un hardlink dans un dossier spécifique vers lequel pointe plex

pourquoi un hardlink? parce que je rapatrie sur mon syno via RSS les fichiers renommés par filebot et seul les hardlink fonctionnaient.

Et pour répondre à hydrog3n donc, au moment où je clique sur supprimer dans rutorrent, ça lance mon script de suppression ci-dessus pour tout supprimer d'un coup à partir du nom du torrent... et donc de l'inode correspondant...

Sinon, en utilisant la fonction supprimer les données, ca ne supprimait pas les hardlinks donc pas de libération de mémoire

J'aimerai bien trouver comment repérer les fichiers qui ne sont plus liés à un torrent mais je n'ai toujours pas trouvé comment faire... j'ai d'ailleurs lancé un post là dessus : http://mondedie.fr/d/7098

mais pas trop de succès
5 ans plus tard

Salut @Magicalex
Ce script m'intéresse mais je ne sais pas faire le lien avec la fonction de suppression. Aurais-tu un pe ude temps pour me guider ?

    Répondre…