web-dev-qa-db-fra.com

Comment supprimer rapidement des fichiers et des répertoires via un terminal (bash Shell)

Depuis la fenêtre du terminal:

Lorsque j'utilise la commande rm, il ne peut supprimer que des fichiers.
Lorsque j'utilise la commande rmdir, elle supprime uniquement les dossiers vides.

Si j’ai un répertoire imbriqué de fichiers et de dossiers dans des dossiers contenant des fichiers, etc., existe-t-il un moyen de supprimer tous les fichiers et tous les dossiers sans saisir la commande au strict minimum?

Si cela fait une différence, j'utilise le shell bash pour Mac du terminal, pas Microsoft DOS ou Linux.

301
None
rm -rf some_dir

-r "récursif" -f "force" (supprimer les messages de confirmation)

Faites attention!

698
Jim Lewis
rm -rf *

Supprime tout (dossiers et fichiers) du répertoire actuel.

Mais faites attention! N'exécutez cette commande que si vous êtes absolument sûr que vous êtes dans le bon répertoire.

55
Prine

Oui il y a. L'option -r indique à rm d'être recursive, et supprime toute la hiérarchie de fichiers enracinée dans ses arguments; En d'autres termes, si un répertoire est donné, il supprimera tout son contenu et effectuera ce qui est effectivement un rmdir.

Les deux autres options à connaître sont -i et -f. -i signifie jenteractif; rm vous invite à supprimer chaque fichier. -f signifie force; il va de l'avant et supprime tout sans demander. -i est plus sûr, mais -f est plus rapide. utilisez-le uniquement si vous êtes absolument certain que vous supprimez la bonne chose. Vous pouvez les spécifier avec -r ou non; c'est un cadre indépendant.

Et comme d'habitude, vous pouvez combiner des commutateurs: rm -r -i n'est que rm -ri, et rm -r -f est rm -rf.

Notez également que ce que vous apprenez s’applique à bash sur tous les systèmes d’exploitation Unix: OS X, Linux, FreeBSD, etc. En fait, la syntaxe de rm est pratiquement la même chaque shell sur chaque système d'exploitation Unix. OS X, sous le capot, est vraiment un système Unix BSD.

11

Je cherchais donc partout un moyen de supprimer tous les fichiers d'un répertoire, à l'exception de certains répertoires, et des fichiers que je souhaitais conserver. Après beaucoup de recherches, j'ai trouvé un moyen de le faire en utilisant find.

find -E . -regex './(dir1|dir2|dir3)' -and -type d -Prune -o -print -exec rm -rf {} \;

Essentiellement, il utilise regex pour sélectionner les répertoires à exclure des résultats, puis supprime les fichiers restants. Je voulais juste le publier ici au cas où quelqu'un d'autre en aurait besoin.

2
msantoro12