rm sans faire de bêtises

Portrait de vulpo

Effacer un fichier n'est pas un gros soucis depuis une interface graphique. Par contre depuis la console c'est une autre histoire puisque les fichiers sont définitivement perdus, sans passer par la case cobeille. Je vous propose donc une commande rm un peu plus sûre, qui va déplacer les éléments dans le /tmp/ (ou tout autre dossier considéré comme dossion “poubelle”) plutôt que de les supprimer sans merci, de façon journalisée.

Le script

Le bash c'est pas mon truc. Cette fois, ce sera du perl. Pour cela il faut vérifier que perl soit bien installé (pas forcément besoin d'une version récente). On peut le vérifier par la commande suivante :

$ perl -v

Le script est fourni en pièce jointe.
Personnellement, redéfinir la commande rm ne me plaît pas trop, j'ai donc nommé le script “rl”, qui est tout aussi facile à tapper que rm et qui a le mérite de conserver ma commande rm en cas de bug caché de rl.

Par défaut rl déplace les éléments dans /tmp, qui se vide à chaque démarrage. Pour changer ce dossier, il faut modifier la ligne 5 du script :

my $trash="/tmp";

Pour faire référence à la home de l'utilisateur pour changer le dossier de destination (le dossier poubelle), je conseille de préférer l'écriture “/home/vulpo/Trash” plutôt que “~/vulpo/Trash”, cette syntaxe n'étant pas géré par le script. Exemple :

my $trash=”/home/vulpo/Trash”

Bien sûr, il faut posséder les droits d'accès en écriture sur ce dossier.

Utilisation

Le script se lance comme un programme ordinaire. Cependant, pour pouvoir lancer le script seulement en tappant :

$ rl dossiersaeffacer

Il faut que le PATH sache où trouver le script (normal, me direz-vous). La commande suivante indique les dossiers connus du PATH, séparés par ':' :

$ echo $PATH

Si un des dossiers connus du PATH vous est accessible, par exemple si vous avez les droits root pour écrire dans le dossier /usr/bin, c'est là qu'il faudra déplacer le script rl.
Si aucun des dossiers n'est accessible, vous devez étendre le PATH sur un autre dossier. On peut par exemple ajouter le dossier ~/Scripts au PATH, où seront déposés tous vos scripts.

$ mkdir ~/Scripts
$ export PATH=~/Scripts:$PATH

Puis déplacer rl dans le dossier ~/Scripts.
Ne pas oublier de disposer des bons droits pour le script :

$ chmod /usr/bin/rl 755 #dans le cas où rl est dans /usr/bin

Sans quoi bash peut ne pas réussir à exécuter le script.

Exemples

L'exécution du script est tout à fait banale. Exemples :

$ rl fichier #fonctionne aussi avec sudo
$ rl test/* #le script accepte les wildcards
$ rl -v test/fichier #l'option -v pour activer le mode verbose (affichage)
$ rl -h #affiche l'aide

Conclusion

Rl est plus sécurisé que rm parce qu'il ne supprime pas les dossiers, et qu'il propose une gestion des fichiers journalisée. Si le dossier de destination n'est pas le /tmp, ou que le système n'est pas destiné à être redémarré régulièrement, il peut être judicieux d'archiver automatiquement le dossier poubelle, en couplant le script avec un cron par exemple.
Si jamais vous trouvez des bugs ou si vous avez des conseils sur le design du code, je suis tout à fait intéressé !

Domaine: 
Fichier attachéTaille
Plain text icon Script perl rl. A renommer en "rl".1.73 Ko

Commentaires

Portrait de trax

$ mkdir {plop,plip}
$ touch plop/foo
$ touch plip/foo
$ rl plop/foo
$ rl plip/foo

Qu'est ce qui se passe dans ce cas là ?

2B G33K || !2B

Portrait de furet

C'est pas un peu dangereux d'avoir appelé le script rl?
Parce sur clavier azerty le M est à côté du L et avec le clavier qui se blo

...