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 :
du coup j'ai trouvé cette syntaxe :
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)
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...