web-dev-qa-db-fra.com

Comment puis-je tout supprimer dans un répertoire?

Comment supprimer tout dans un répertoire, y compris des fichiers et des répertoires cachés?

En ce moment, j'utilise ce qui suit:

rm -rf *
rm -rf .*
25
David Smith

La meilleure réponse est la suivante: ne faites pas cela. Supprimez récursivement le répertoire lui-même, puis le recréez comme un répertoire vide. Il est plus fiable et plus facile pour les autres de comprendre ce que vous essayez de faire. Lorsque vous recréez le répertoire, il peut avoir un propriétaire, un groupe et des autorisations différents. Si ceux-ci sont importants soient prudents. De plus, si des programmes en cours d'exécution ont des poignées de fichier ouverts (descripteurs) sur le répertoire, vous ne voudrez plus la supprimer. Si aucun de ces cas spéciaux ne s'applique, il est plus simple de supprimer tout le répertoire.

11
Chris Quenelle
rm -rf -- * .[!.]* ..?*

Chacun des trois motifs se développe à lui-même s'il ne correspond à rien, mais ce n'est pas un problème ici puisque nous voulons tout faire correspondre à tout et rm -f Arguments inexistants ignorés.

Noter que .* correspondrait à .. .

En supposant que Bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Avec Dotglob activé, * élargit à tous les fichiers et répertoires, même ceux qui commencent par . - mais non Développer à . et .., il est donc sûr d'utiliser avec rm.

5
evilsoup

si vous êtes dans le répertoire:

cd .. && rm -rf dir && mkdir dir && cd dir

autrement:

rm -rf /path/to/dir && mkdir /path/to/dir

2
David Harris

Oh mon zsh

rm -rf (.|)*

Encore une fois, c'est pour ZSH uniquement.

2
phunehehe

Que diriez-vous d'utiliser find. Je pense que c'est généralement un bon choix, lorsque vous devez creuser des sous-répertoires.

find . -type f -exec rm {} \;
1
slashdot