Vous pouvez monter un répertoire puis exécuterrm -rf yourdirectory/*
shreyansp
1
désolé manqué la partie du répertoire caché. La solution des utilisateurs précédents couvre cela
shreyansp
Cette deuxième option que vous avez publiée est très dangereuse. Il correspondra au ..répertoire, ce qui supprimera tout ce qui se trouve dans le répertoire ci-dessus .
Richard Peterson
Réponses:
17
Simple et direct:
find -delete
Comprend des répertoires et des fichiers cachés. Au moins, gnu-find le sait -delete, votre findpeut différer.
Pour éviter de supprimer le répertoire, utilisez find /path -delete -mindepth 1.
orodbhen
@orodbhen: find -delete ne supprimera pas le répertoire où vous lancez la commande (comme dans la question avec rm).
utilisateur inconnu
11
La meilleure réponse est: ne faites pas ça. Supprimez récursivement le répertoire lui-même, puis recréez-le en tant que 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, faites attention. De plus, si des programmes en cours d'exécution ont des descripteurs de fichiers ouverts (descripteurs) sur le répertoire, vous ne voudrez pas le supprimer. Si aucun de ces cas particuliers ne s'applique, il est plus simple de supprimer l'intégralité du répertoire.
Alors, comment est-ce plus facile? «Soyez prudent» n'est pas une réponse. Je ne comprendrais pas pourquoi quelqu'un supprime un répertoire et le reconstruit à nouveau.
utilisateur inconnu
J'ai ajouté l'expression "comme un répertoire vide", c'est peut-être plus clair.
Chris Quenelle
2
Non, cela n'explique pas pourquoi vous supprimez un répertoire et le recréez ensuite. Aux choses à considérer appartient, entre autres, la date / heure de création aussi.
utilisateur inconnu
2
Si ce répertoire est le répertoire de travail actuel d'un processus, vous pouvez rencontrer des problèmes. En outre, si vous supprimez le répertoire, vous supprimez des informations sur ses autorisations et sa propriété.
8
rm -rf --*.[!.]*..?*
Chacun des trois modèles se développe s'il ne correspond à rien, mais ce n'est pas un problème ici car nous voulons tout faire correspondre et rm -fignorer les arguments inexistants.
Avec dotglob activé, *s'étend à tous les fichiers et répertoires, même ceux commençant par .- mais ne s'étend pas à .et .., il est donc sûr de l'utiliser avec rm.
vous avez raison. il ne supprime pas les sous-répertoires.
gladimdim
4
Il est plus probable que le problème *?*ne correspondra pas aux fichiers / répertoires "dot" (sauf si vous avez activé l' dotgloboption dans bash , l' GLOB_DOTSoption dans zsh ou un équivalent pour le shell que vous utilisez).
rm -rf .* *
.rm -rf yourdirectory/*
..
répertoire, ce qui supprimera tout ce qui se trouve dans le répertoire ci-dessus .Réponses:
Simple et direct:
Comprend des répertoires et des fichiers cachés. Au moins, gnu-find le sait
-delete
, votrefind
peut différer.la source
find /path -delete -mindepth 1
.La meilleure réponse est: ne faites pas ça. Supprimez récursivement le répertoire lui-même, puis recréez-le en tant que 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, faites attention. De plus, si des programmes en cours d'exécution ont des descripteurs de fichiers ouverts (descripteurs) sur le répertoire, vous ne voudrez pas le supprimer. Si aucun de ces cas particuliers ne s'applique, il est plus simple de supprimer l'intégralité du répertoire.
la source
Chacun des trois modèles se développe s'il ne correspond à rien, mais ce n'est pas un problème ici car nous voulons tout faire correspondre et
rm -f
ignorer les arguments inexistants.Notez que
.*
cela correspondrait..
.la source
En supposant que bash 4+:
Avec dotglob activé,
*
s'étend à tous les fichiers et répertoires, même ceux commençant par.
- mais ne s'étend pas à.
et..
, il est donc sûr de l'utiliser avecrm
.la source
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
la source
Oh mon Zsh
Encore une fois, c'est uniquement pour Zsh.
la source
*(D)
(leD
qualificatif glob active l'glob_dots
option pour ce modèle).rm -rf {.,}*
(contrairement à bash, zsh n'inclut pas.
et..
dans{.,}*
, au moins sur ma machine).Que diriez-vous d'utiliser
find
. Je pense que c'est généralement un bon choix lorsque vous devez fouiller dans des sous-répertoires.la source
Essayez
rm -rf *?*
. Cela supprimera les fichiers normaux et masqués.la source
*?*
ne correspondra pas aux fichiers / répertoires "dot" (sauf si vous avez activé l'dotglob
option dans bash , l'GLOB_DOTS
option dans zsh ou un équivalent pour le shell que vous utilisez).