rm -fr ma_connerie

Parfois, par habitude ou lassitude, on oublie certains principes de bases en programmation : toujours vérifier scrupuleusement les conséquences d'une action quand celle-ci implique la suppression de données. Ou comment un script plutôt anodin a failli envoyer ad patres une semaine de travail.

Le script en question devait effectuer quelques opérations de maintenance. L'une d'elle commence par la ligne suivante :

rm -fr $VAR*
Commande de suppression de fichiers temporaires.

La variable $VAR est sensé être un répertoire. La commande doit donc supprimer de manière récursive tout ce qui se trouve dans ce répertoire. Sauf que je venais de modifier la dite variable quelques lignes plus haut et, sans m'en rendre compte, elle était maintenant vide, ce qui fait que la ligne de commande se traduisait par :

rm -fr *
Ligne de commande à ne jamais lancer !

Autrement dit : effacer tout ce qui se trouve dans le répertoire courant ! Le bash étant un outil fort consciencieux et fort obéissant, c'est ce qu'il a fait !

Aie Aie Aie Aie !

Toutes les données du projet évanouies, alors que le but du jeu était de nettoyer un unique répertoire pour y copier de nouveaux fichiers. Résultat : grosse panique pendant une dizaine de minutes en maudissant ma connerie, en pleurant sur le travail que je venais de perdre et en cherchant désespérément dans mes sauvegardes (qui bien-sur n'étaient pas à jour) une éventuelle copie des fichiers. Alors :

(1) Heureusement que je n'ai pas lancé le script au niveau de la racine de mon home(1), sinon absolument toutes mes données seraient partie en fumée !

(2) Heureusement que le projet était versionné avec bazaar, que je venais d'enregistrer les dernières modifications et que j'avais copié dans un coin le répertoire de configuration (.bzr) - allez savoir pourquoi, prémonition sans doute. Il m'a suffit de le restaurer et de faire un bzr revert pour retrouver toutes mes données.

OUF !

Il y a des jours, j'me mettrais bien quelques claques !