Este es un trazador de líneas realmente simple:
find Parent -empty -delete
Es bastante autoexplicativo. Aunque cuando revisé me sorprendió que elimina con éxito Parent/Child1. Por lo general, esperaría que procesara al padre antes que al hijo, a menos que especifique -depth
.
Esto funciona porque -delete
implica -depth
. Consulte el manual de búsqueda de GNU:
-delete
Borrar archivos; verdadero si la eliminación se realizó correctamente. Si la eliminación falla, se emite un mensaje de error. Si -delete falla, el estado de salida de find será distinto de cero (cuando finalmente salga). El uso de -delete activa automáticamente la opción - depth.
Tenga en cuenta que estas funciones no forman parte del estándar Posix, pero lo más probable es que estén presentes en muchas distribuciones de Linux. Es posible que tenga un problema específico con los más pequeños, como Alpine Linux, ya que se basan en Busybox, que no es compatible con -empty
.
Otros sistemas que incluyen -empty
no estándar y -delete
incluye BSD y OSX pero aparentemente no AIX.
Aquí hay una solución de dos comandos
Eliminar archivos vacíos
find Parent/ -type f -size 0 -delete
Intente eliminar todos directorios
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null
NOTA rmdir
no puede eliminar directorios que no estén vacíos, por lo que es seguro ejecutarlo pero producirá errores, que estamos ocultando
Como arriba, pero siendo un poco más específico sobre los mensajes de error que se ignoran. Es posible que deba modificarse si el mensaje varía según las distribuciones.
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
| grep -iv "Directory not empty$"
También puedes hacer esto con el fd
herramienta:
fd -t e -x rm -r
https://github.com/sharkdp/fd