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 .*
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.
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
.
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
Oh mon zsh
rm -rf (.|)*
Encore une fois, c'est pour ZSH uniquement.
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 {} \;