Estoy usando rsync para recuperar archivos esenciales de un servidor, luego elimino los archivos del servidor una vez que los tengo localmente. El comando completo que estoy ejecutando está debajo.
Esto elimina con éxito los archivos en el servidor de origen, sin embargo, todavía quedan directorios vacíos. No recibo ningún mensaje o error. Toda la salida es normal. Quizás esta sea la funcionalidad prevista.
¿Cómo puedo decirle a rsync que limpie todo, incluidos los directorios?
rsync --progress -vrzh --remove-source-files
La versión es 3.0.9 en ambos extremos.

Respuestas:
El comportamiento
--remove-source-filesque observa es exactamente el especificado porman rsync:No hay un comando específico para eliminar los directorios, ya que estas dos discusiones en StackExchange y ServerFault se muestran claramente. La solución sugerida es emitir dos comandos separados:
La última parte del comando sugerido en estas dos publicaciones,
que se necesita para eliminar el directorio fuente (ahora vaciado) tiene este formulario en estas publicaciones porque los OP y las respuestas están usando rsync para mover grandes cantidades de archivos dentro de la misma máquina. En su caso, tendrá que hacer esto manualmente.
fuente
rsync --deletesugerencia es peligrosa porque ignora la posibilidad de que rsync no se haya completado o que haya nuevos archivos en la fuente. Elfindsiguiente método de @ slhck es mucho más seguro.La página de manual incluso dice:
Si desea eliminar directorios vacíos en su fuente, si aún quedan archivos, haga lo siguiente:
Pero para un directorio raíz vacío, una
rm -rf <directory>voluntad será suficiente.fuente
find some_dir -depth -type d -empty -not -path some_dir -deleteEl uso de " rm -rf " tiene una condición de carrera inherente, es decir, puede eliminar archivos que acaban de crearse entre las invocaciones rsync y rm .
Prefiero usar:
Esto NO eliminará los directorios si no están vacíos.
fuente
rm -rftambién eliminará los archivos que no fueron transferidos por alguna razón.-depthopción que indicafindprocesar en el orden correcto. Como resultado de este error, los directorios que contienen solo directorios vacíos (posiblemente de forma recursiva) no se eliminarán. La variante de @slhck tiene razón.-m, --prune-empty-dirspode cadenas de directorios vacías de la lista de archivos--forceforzar la eliminación de directorios incluso si no está vacíofuente
Elimine los archivos de origen, luego elimine los directorios para estar seguro.
fuente