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-files
que 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 --delete
sugerencia es peligrosa porque ignora la posibilidad de que rsync no se haya completado o que haya nuevos archivos en la fuente. Elfind
siguiente 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 -delete
El 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 -rf
también eliminará los archivos que no fueron transferidos por alguna razón.-depth
opción que indicafind
procesar 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-dirs
pode cadenas de directorios vacías de la lista de archivos--force
forzar la eliminación de directorios incluso si no está vacíofuente
Elimine los archivos de origen, luego elimine los directorios para estar seguro.
fuente