Vous avez supprimé (presque) tout votre répertoire personnel!
rm -r something
supprime récursivement les fichiers et répertoires dans / sous quelque chose ; il échouera uniquement sur les éléments qu'il n'est pas autorisé à supprimer, soit parce qu'ils appartiennent à un autre utilisateur (par exemple root
), soit parce qu'ils sont en cours d'utilisation (par exemple, un montage GVFS).
Si vous n'avez pas ajouté -f
(comme dans, rm -rf something
), vous obtiendrez quelque chose comme:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
À ce stade, vous pouvez abandonner et vous vous rendez probablement compte que vous avez exécuté la mauvaise commande.
Suggestions de la communauté sur la façon d'éviter de tels accidents
Remarque: wiki communautaire, tout le monde se sent s'il vous plaît libre de contribuer.
Pour quelques fichiers, utilisez le -i
option pour obtenir une confirmation sur la suppression de fichiers ou de répertoires:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Si vous supprimez d'un répertoire courant, préfixez-le par un ./
pour éviter de supprimer par erreur un emplacement différent.
$ cd something
$ rm -v ./*~
removed ‘./file~’
Ce qui précède était pour démontrer l'utilisation de ./
. S'il existe un sous-répertoire, vous pouvez bien sûr également l'utiliser rm -v something/*~
. Attention : ne pensez pas que cela rm ./.*
supprime tous les fichiers cachés du répertoire courant. Voir cette question Serverfault pour des solutions de contournement sur la globalisation des fichiers cachés.
Déplacer plutôt que supprimer: Plutôt que de supprimer les fichiers récursivement en premier lieu, je me suis habitué à déplacer les fichiers dont je veux me débarrasser ailleurs avant de les supprimer finalement. Si quelque chose a mal tourné, il est facile de le restaurer.
mv -b SOURCE DEST
Utilisez find
(éventuellement avec grep
) pour prévisualiser si vous souhaitez supprimer récursivement les fichiers sélectionnés. Vous devriez essayer d'en faire un événement rare, mais si vous devez ...
find
sans arguments répertorie de manière récursive tous les fichiers / répertoires sous le courant. Vous devriez essayer de chercher man find
comment le rendre sélectif (un trésor), mais si vous ne voulez pas vous embêter, vous pouvez simplement utiliser le familier grep
pour filtrer les fichiers que vous souhaitez supprimer.
- Supposons que je suis un pirate du noyau uber-l33t et que les quelques Ko de fichiers "d'exemple" de mon arbre source me dérangent; Je veux supprimer tous les fichiers contenant cela dans le nom. Je tape donc
find | grep example
, ce qui me donne ces 20 fichiers. Cela semble bon, donc je vais maintenant supprimer ces fichiers exacts, ainsi que la rm -v
sortie détaillée précédemment mentionnée, via xargs
:
trouver | exemple grep | xargs rm -v
ce qui me donne cette sortie. Un tel aperçu prévient les problèmes où, par exemple, vous faites une faute de frappe et tapez sample
au lieu de example
.
La solution ci-dessus ne doit pas être utilisée si vous pouvez avoir des noms de fichiers contenant des espaces, des tabulations, des sauts de ligne ou des guillemets ( "
ou '
), car cela entraînera xargs
soit un échec, soit un flux rm
avec des noms de fichiers incomplets, ce qui dans le pire des cas pourrait finir par supprimer le mauvais des dossiers. Le moyen sûr de faire ce qui précède est de tout faire avec find
les opérateurs et les actions de.
Ce qui suit montrera tous les fichiers qui contiennent le mot example
find . -name "*example*"
Si cette liste correspond aux fichiers que vous souhaitez supprimer, utilisez l' -exec
action pour transmettre les fichiers à rm
.
find . -name "*example*" -exec rm -v {} +
Voir Utilisation de la recherche pour plus d'aide sur l'utilisation find
.