supprimer des sous-dossiers sans supprimer le dossier parent

15

Pour ce type de structure dir:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

Je sais que je peux utiliser rm -rf /config/filesgroupspour supprimer le dossier parent et tous les sous-dossiers ...

mais je veux supprimer seulement /filegroupA, /filegroupBetc., et non supprimer/config/filegroups

BaltoStar
la source
13
Y a-t-il un problème pour utiliser rm -rf / config / filesgroups / *?
dsmsk80
3
Ou peut-être même rm -rf /config/filegroups/filegroups{A,B}?
Drav Sloan
@dsumsky Par défaut, bashn'inclut pas '.' dossiers dans l'extension de chemin d'accès. Qui peut ou non être souhaité. Moi - même je le fais shopt -s dotglobdans .bashrcpour résoudre ce problème. Juste une petite note que quelqu'un pourrait trouver utile;).
Miroslav Koškár
Est-ce que cela a fonctionné pour vous? Si oui, cela vous dérangerait-il d'accepter une réponse, afin d'aider les autres (comme moi) qui veulent faire la même chose?
Mawg dit réintégrer Monica
rm -rf /*fera l'affaire;) --- sérieusement, ne le faites pas
Muhammad Umer

Réponses:

28
rm -rf /config/filegroups/*

Si vous souhaitez supprimer uniquement les répertoires (et les liens symboliques vers les répertoires), en laissant les fichiers /config/filegroupsintacts, vous pouvez utiliser une barre oblique de fin:

rm -rf /config/filegroups/*/

Si vous souhaitez également supprimer les répertoires dont les noms commencent par a ., en supposant que vous disposez d'un bash assez récent, vous devez utiliser l'option shell dotglob:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob
evilsoup
la source
et s'il vous plaît pas que cela ne fonctionnera pas pour rm -rf "/ config / filegroups / *"
Ilya Yevlampiev
5

Cela supprimera tous les fichiers et répertoires sous /config/filegroupsy compris les fichiers et répertoires "cachés" (noms commençant par .).

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

Si les noms de fichiers ou de répertoires contiennent des espaces, vous devez le faire comme ceci:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Bonus: vous pouvez d'abord vérifier ce qui va être supprimé comme ceci:

find /config/filegroups -mindepth 1 -maxdepth 1

Si vous souhaitez conserver certains fichiers ou répertoires, vous pouvez le faire comme ceci:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"
lesmana
la source
Y a-t-il une raison de ne pas utiliser findl' -deleteoption de?
evilsoup
4
-deleterefuse de supprimer les répertoires non vides. -maxdepthremplace -depth, ce qui est nécessaire -deletepour supprimer les répertoires non vides. Sans cela, -maxdepthvous ne pouvez pas facilement voir quels répertoires vont être supprimés car il répertorie également les fichiers à l'intérieur des répertoires. Ne pas utiliser -maxdepthsignifie également que vous ne pouvez pas facilement utiliser des filtres comme -name. De plus, -deletesupprime les répertoires en supprimant tous les objets à l'intérieur en premier, ce qui peut prendre beaucoup de temps s'il s'agit d'un arbre grand et profond.
lesmana
4

Je préfère utiliser findavec -exec, cela ferait de votre appel quelque chose comme ceci:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;
Panthro
la source
-2

Si vous êtes déjà dans le dossier, vous pouvez simplement taper rm -rf ./**

Donc:

cd /config/filesgroups
rm -rf ./**

Il s'agit d'un modèle global pour supprimer tous les sous-dossiers du chemin local.

./se référant au dossier local ... et **pour tous les dossiers en dessous ..

Mantisimo
la source
1
Quel dossier, et pourquoi `** ''
RalfFriedl
1
Ce serait exactement la même chose rm -rf ./*, sauf que vous risquez d'obtenir des messages de diagnostic sur "Aucun fichier ou répertoire" si vous n'utilisez pas -fvotre commande (car le répertoire le plus élevé serait supprimé récursivement avant que son contenu ne soit traité par rm).
Kusalananda