Supposons que j'ai un arbre dir comme celui-ci:
ROOTDIR
└--SUBDIR1
└----SUBDIR2
└----SUBDIR3
Je recherche une commande telle que lorsque j'entre:
$ [unknown command] ROOTDIR
L'arborescence de répertoires entière peut être supprimée s'il n'y a pas de fichier mais uniquement des répertoires à l'intérieur de l'arborescence entière . Cependant, dites s'il y a un fichier appelé hello.pdf sous SUBDIR1:
ROOTDIR
└--SUBDIR1
└--hello.pdf
└----SUBDIR2
└----SUBDIR3
Ensuite, la commande doit uniquement supprimer SUBDIR2 et inférieur.
Réponses:
Alexis est proche. Ce que vous devez faire est le suivant:
Cela va d'abord explorer l'arborescence des répertoires jusqu'à ce qu'il trouve le premier répertoire vide, puis le supprimer. Rendre ainsi le répertoire parent vide qui sera ensuite supprimé, etc. Cela produira l'effet souhaité (je le fais probablement 10 fois par semaine, donc je suis sûr que c'est vrai). :-)
la source
-depth
option est-elle nécessaire?find . -type d -empty -exec rmdir "{}" \;
devrait également fonctionner .... non?foo/bar/baz
. À moins que vous n'utilisiez-depth
, il essaiera de supprimer d'foo
abord, échouera et vous vous retrouverez avecfoo/bar
après avoir exécuté.+
place de;
si vous supprimez des répertoires par lots. Puisque vous le faites en profondeur d'abord, les enfants seront toujours supprimés avant les parents (éventuellement dépendants de votre version de rmdir / bash et dépendants de rmdir ne supprimant pas les répertoires non vides). Cela fonctionne pour moi dans bash sur cygwin:mkdir -p a/b/c/d ; find a -depth -type d -exec rmdir {} +
pareil que
mais utilise l'action intégrée "-delete".
Notez que "-delete" implique "-depth".
la source
J'essaierais ceci:
la source
Voici quelques exigences avant de pouvoir le faire en toute sécurité:
Voici comment je ferais cela en shell:
Si cela ne vous dérange pas certaines erreurs redondantes, vous pouvez simplement forcer la suppression de tous les répertoires avec les parents et vous n'avez pas besoin de faire de tri (vous ne pouvez pas trier les chaînes terminées par NUL, ce qui ajoute la nécessité de tr)
la source
-empty -delete
optionsfind
dans la réponse de @ go2null.la source
find
parce quefind
a une façon de faire le traitement proprement:find … -exec
.Je ferais ceci:
la source