Bonjour, un script pour supprimer temporairement des fichiers, dernier rempart avant le
rm -rf fatidique et tellement humain
Pour peu qu'il fonctionne, et qu'on prenne l'habitude de ne plus utiliser rm.
(on peut même imaginer d'invalider la commande rm sauf pour le panier ...), ça peut le faire :
1/ Créer un
fichier dans un
répertoire de scripts (ex:
/.scripts/remove).
2/ Coller ce contenu dedans :
Code:
#!/bin/bash
# suppression temporaires des fichiers et répertoires dans un repertoire Panier.
PANIER=/home/$USER/Panier # la corbeille
# On la crée si nécessaire
if [ -e "$PANIER" ]; then
if [ -f "$PANIER" ]; then
echo "Un fichier nommé panier est déjà présent, supprimez ou renommez le"
echo "ou modifier le nom du repertoire Panier dans la variable ci-dessus."
fi
else
mkdir $PANIER
chmod 770 $PANIER # user à tout les droits dessus
fi
# on détermine un mode détaillé des actions
declare -i MODE=1
[ "$1" == '-v' ] && {
MODE=0
shift
}
[ $MODE -eq 0 ] && echo "Les fichiers spécifiés vont être déplacés dans $PANIER"
# on teste les arguments passés
case $# in
0)
echo "Usage: remove [-v :verbose] fichier:"
echo "Spécifiez un fichier ou un repertoire à supprimer"
exit 1 ;;
*)
for fic in $*; do # simple boucle sur les fichiers
[ ! -e $fic ] && {
echo "Argument invalide <$fic> ignoré"
continue # ignore les noms de fichiers incorrects
}
if [ -e "$PANIER/$fic" ]; then # vérifie que la corbeille ne contient pas $fic
read -s -p "Il existe déjà un fichier $fic dans le panier, écraser (y/N): " resp
case $resp in
y | Y | o | O)
echo
# on doit déplacer le fichier de même nom, qu'on renomme (?)
mv $PANIER/$fic $PANIER/$fic-bak
mv $fic $PANIER # si éffacement confirmé, on déplace
if [ $? -eq 0 ]; then
[ $MODE -eq 0 ] && echo "Suppression de $fic"
fi ;;
*) echo ;; # ou bien ne fait rien
esac
else
mv $fic $PANIER # on déplace $fic dans la corbeille
if [ $? -eq 0 ]; then
[ $MODE -eq 0 ] && echo "Suppression de $fic"
fi
fi
done ;;
esac
3/ Attribuer les permissions nécessaires :
Code:
# chown root:root /.scripts/remove
# chmod 755 /.scripts/remove
rendu exécutable pour tout utilisateur.
4/ linker se fichier dans le bin d'un utilisateur ayant droit :
# ln -s /.scripts/remove /home/$USER/bin/remove
Ici, si vous linkez en root, remplacez $USER par le nom réel de l'user (en dur).