Supongamos que tengo un árbol de directorios como este:
ROOTDIR
└--SUBDIR1
└----SUBDIR2
└----SUBDIR3
Estoy buscando un comando tal que cuando ingreso:
$ [unknown command] ROOTDIR
Se puede eliminar todo el árbol de directorios si no hay un archivo, sino solo directorios dentro del árbol completo . Sin embargo, diga si hay un archivo llamado hello.pdf en SUBDIR1:
ROOTDIR
└--SUBDIR1
└--hello.pdf
└----SUBDIR2
└----SUBDIR3
Entonces el comando solo debe eliminar SUBDIR2 y más abajo.
Respuestas:
Alexis está cerca. Lo que debes hacer es esto:
Primero, profundizará en el árbol de directorios hasta que encuentre el primer directorio vacío, luego bórrelo. De este modo, se vacía el directorio principal, que luego se eliminará, etc. Esto producirá el efecto deseado (lo hago probablemente 10 veces por semana, así que estoy bastante seguro de que es correcto). :-)
fuente
-depth
necesaria la opción?find . -type d -empty -exec rmdir "{}" \;
También debería funcionar ... ¿verdad?foo/bar/baz
. A menos que use-depth
, intentará eliminarfoo
primero, fallar, y terminaráfoo/bar
después de ejecutarse.+
lugar de;
eliminar directorios por lotes. Como lo está haciendo en profundidad, los elementos secundarios se eliminarán antes que los padres (posiblemente dependiendo de su versión de rmdir / bash y dependiendo de que rmdir no elimine directorios no vacíos). Esto funciona para mí en bash en cygwin:mkdir -p a/b/c/d ; find a -depth -type d -exec rmdir {} +
igual que
pero usa la acción integrada "-delete".
Tenga en cuenta que "-delete" implica "-depth".
fuente
Yo intentaría esto:
fuente
Aquí hay algunos requisitos antes de que podamos hacerlo de manera segura:
Así es como lo haría en shell:
Si no le importan algunos errores redundantes, simplemente puede forzar la eliminación de todos los directorios con los padres y no necesita ordenarlos (no puede ordenar las cadenas terminadas en NUL, lo que agrega la necesidad de tr)
fuente
-empty -delete
opcionesfind
en la respuesta de @ go2null.fuente
find
porquefind
tiene una manera de hacer el procesamiento limpiamente:find … -exec
.Yo haría esto:
fuente