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/filesgroups
pour supprimer le dossier parent et tous les sous-dossiers ...
mais je veux supprimer seulement /filegroupA
, /filegroupB
etc., et non supprimer/config/filegroups
rm -rf /config/filegroups/filegroups{A,B}
?bash
n'inclut pas '.' dossiers dans l'extension de chemin d'accès. Qui peut ou non être souhaité. Moi - même je le faisshopt -s dotglob
dans.bashrc
pour résoudre ce problème. Juste une petite note que quelqu'un pourrait trouver utile;).rm -rf /*
fera l'affaire;) --- sérieusement, ne le faites pasRéponses:
Si vous souhaitez supprimer uniquement les répertoires (et les liens symboliques vers les répertoires), en laissant les fichiers
/config/filegroups
intacts, vous pouvez utiliser une barre oblique de fin: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:la source
Cela supprimera tous les fichiers et répertoires sous
/config/filegroups
y compris les fichiers et répertoires "cachés" (noms commençant par.
).Si les noms de fichiers ou de répertoires contiennent des espaces, vous devez le faire comme ceci:
Bonus: vous pouvez d'abord vérifier ce qui va être supprimé comme ceci:
Si vous souhaitez conserver certains fichiers ou répertoires, vous pouvez le faire comme ceci:
la source
find
l'-delete
option de?-delete
refuse de supprimer les répertoires non vides.-maxdepth
remplace-depth
, ce qui est nécessaire-delete
pour supprimer les répertoires non vides. Sans cela,-maxdepth
vous 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-maxdepth
signifie également que vous ne pouvez pas facilement utiliser des filtres comme-name
. De plus,-delete
supprime 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.Je préfère utiliser
find
avec-exec
, cela ferait de votre appel quelque chose comme ceci:la source
Si vous êtes déjà dans le dossier, vous pouvez simplement taper
rm -rf ./**
Donc:
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 ..la source
rm -rf ./*
, sauf que vous risquez d'obtenir des messages de diagnostic sur "Aucun fichier ou répertoire" si vous n'utilisez pas-f
votre commande (car le répertoire le plus élevé serait supprimé récursivement avant que son contenu ne soit traité parrm
).