Étant donné:
EmptyMe
à différents niveauxEmptyMe
répertoires contiennent des sous-répertoires et des fichiersObligatoire:
EmptyMe
(y compris leurs sous-répertoires), tout en conservant ces répertoires (sans les supprimer).Question:
Qu'est-ce que la commande Unix pour rechercher récursivement tous les répertoires EmptyMe
du niveau actuel et supprimer tout leur contenu (y compris les sous-répertoires), tout en conservant les répertoires EmptyMe
sur le disque?
Ma tentative:
$ find . -name 'EmptyMe' -type d -exec rm -- {} +
rm: cannot remove `./a/b/c/d/EmptyMe': Is a directory
Comme vous pouvez le constater, cette commande a tenté de supprimer EmptyMe
name__, par opposition à son contenu.
Merci!
Essai:
find . -path '*/EmptyMe/*'
Suppression réelle:
find . -path '*/EmptyMe/*' -delete
-path '*/EmptyMe/*'
signifie correspond à tous les éléments qui se trouvent dans un répertoire appelé EmptyMe
.
Une option possible consiste à imbriquer les commandes:
find . -type d -name 'EmptyMe' -exec find {} -mindepth 1 -delete \;
find -type d -name 'EmptyMe'
externe recherche les répertoires requis et exécute la commande find
intérieure via -exec ... \;
. La commande interne descend dans le répertoire trouvé (référencée via {}
) et, comme nous utilisons -delete
dans cet indicateur, elle devrait suivre la recherche en profondeur en premier, la suppression des fichiers, puis les sous-répertoires.
Cela fonctionne, mais cela donne des erreurs si les répertoires EmptyMe
sont vides.
find . -name 'EmptyMe' -type d -exec sh -c 'rm -r -- "$1"/*' sh {} \;
Exemple d'erreur:
rm: cannot remove ‘./EmptyMe/*’: No such file or directory