À la fin de ce tutoriel, vous saurez supprimer un fichier, un dossier vide, une arborescence complète et des fichiers filtrés par nom ou par ancienneté, en vérifiant chaque fois la cible avant d'agir. Sous Linux, il n'y a pas de corbeille en ligne de commande : une suppression est définitive. La méthode compte donc autant que la commande.
Prérequis
- Un accès shell à une machine Linux (local ou SSH), par exemple un VPS Linux
- Un utilisateur disposant des droits d'écriture sur le dossier concerné (ou
sudo) - Une sauvegarde récente de ce qui est important
Vérifier la cible avant de supprimer
Placez-vous dans le bon dossier et listez son contenu. Cela prend deux secondes et évite la plupart des accidents.
Bashpwd ls -la
Pour un motif (extension, préfixe), affichez d'abord ce qu'il va toucher. La commande rm utilisera exactement la même liste.
Bashls -d *.log
Supprimer un fichier
La commande de base est rm.
Bashrm report.txt
Ajoutez -i pour qu'elle demande confirmation, et -v pour qu'elle affiche ce qu'elle supprime.
Bashrm -iv report.txt
Contrôlez ensuite avec ls report.txt : le message « No such file or directory » confirme la suppression.
Supprimer plusieurs fichiers
Les jokers du shell permettent de cibler un lot. Listez d'abord avec ls, puis supprimez.
Bashrm -v *.tmp rm -v photo_{01..05}.jpg
Évitez un joker nu comme rm * dans un dossier dont vous n'êtes pas certain. Si un nom de fichier commence par un tiret, utilisez -- pour signaler la fin des options :
Bashrm -- -strange-file.txt
Supprimer un dossier vide
rmdir ne supprime que les dossiers vides. C'est voulu : il sert de garde-fou.
Bashrmdir old_folder
Pour retirer aussi les parents devenus vides :
Bashrmdir -p project/cache/tmp
Supprimer un dossier et tout son contenu
Il faut ici l'option récursive -r. Estimez d'abord ce que vous allez perdre.
Bashdu -sh old_project find old_project -type f | wc -l
Puis supprimez, avec confirmation :
Bashrm -ri old_project
Sur des milliers de fichiers, la confirmation devient impraticable. L'option -f la désactive :
Bashrm -rf old_project
Ne placez jamais une variable non vérifiée dans cette commande. Avec rm -rf "$DIR"/, si $DIR est vide, vous visez la racine. Dans un script, ajoutez set -u ou utilisez "${DIR:?}", qui interrompt l'exécution si la variable est vide.
Supprimer des fichiers selon leur ancienneté
find filtre sur des critères précis (nom, type, âge, taille). Le principe : exécuter d'abord sans action, puis ajouter -delete.
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30
Si la liste correspond à ce que vous attendez :
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30 -delete
-mtime +30 désigne les fichiers modifiés il y a plus de 30 jours. Placez -delete en dernier : find évalue les conditions de gauche à droite, et un -delete placé trop tôt supprime tout.
Effacer de façon plus sûre un fichier sensible
rm retire l'entrée du fichier, pas forcément les données du disque. shred écrase le contenu avant suppression.
Bashshred -u -v secret.key
Cette méthode a des limites sur les SSD, les systèmes de fichiers journalisés ou les volumes avec snapshots, où d'anciennes données peuvent subsister. Pour des données réellement sensibles, le chiffrement du disque dès le départ reste la solution fiable.
Corriger les erreurs courantes
Permission denied
Vous n'avez pas le droit d'écriture sur le dossier parent (c'est lui qui contrôle la suppression, pas le fichier). Vérifiez avec ls -ld DIRECTORY, puis utilisez sudo si c'est légitime :
Bashsudo rm -v /path/to/file
Operation not permitted, même avec sudo
Le fichier porte probablement l'attribut immuable. Consultez-le, retirez-le, puis supprimez.
Bashlsattr file.txt sudo chattr -i file.txt sudo rm file.txt
Argument list too long
Le joker a produit plus d'arguments que le système n'en accepte. Passez par find, qui traite les fichiers un par un :
Bashfind . -maxdepth 1 -type f -name "*.tmp" -delete
Directory not empty ou Device or resource busy
Avec rmdir, le premier message est normal : le dossier contient des fichiers, y compris cachés (ls -A). Si un point de montage ou un processus l'utilise, identifiez-le avec lsof +D DIRECTORY ou findmnt, puis libérez-le avant de réessayer.
Pour vous entraîner sans risque, une instance jetable est pratique : sur un VPS, vous pouvez créer un dossier d'essai et vous tromper sans conséquence. D'autres guides du même type sont réunis dans la section tutoriels.
FAQ
Peut-on récupérer un fichier supprimé avec rm ?
Rarement et sans garantie. Des outils comme extundelete ou testdisk retrouvent parfois des données si vous cessez d'écrire sur le disque immédiatement. La seule protection fiable reste la sauvegarde.
Quelle est la différence entre rm -r et rm -rf ?
rm -r supprime récursivement mais demande confirmation sur les fichiers protégés en écriture. rm -rf force la suppression et ignore sans message les fichiers inexistants. Réservez-le aux cas où vous avez déjà vérifié la cible.
Comment supprimer un dossier dont le nom contient des espaces ?
Entourez le nom de guillemets ou échappez les espaces : rm -r "My folder" ou rm -r My\ folder. Sans cela, le shell traite chaque mot comme un élément distinct.
Existe-t-il une corbeille en ligne de commande ?
Oui, via le paquet trash-cli (commande trash-put), qui déplace les éléments vers la corbeille de l'utilisateur au lieu de les effacer. Sur un serveur, elle est rarement installée par défaut : prenez l'habitude de lister avant de supprimer.