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


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

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"

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 {} \;

-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 ..


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.