Tengo que mover algunos archivos de un sistema de archivos a otro en Ubuntu. Sin embargo, es muy importante que los archivos nunca existan como archivos parciales o incompletos en el destino, al menos no con el nombre de archivo correcto.
Hasta ahora, mi única solución es escribir un script que tome cada archivo, lo copie en un nombre temporal en el destino, luego cambie el nombre (que creo que debería ser atómico) en el destino al nombre de archivo original y finalmente elimine el archivo de origen .
Sin embargo, escribir y depurar un script parece que es excesivo para esta tarea. ¿Hay alguna forma o herramienta que ya lo haga de forma nativa?

Respuestas:
rsynccopias a nombres de archivos temporales (p. ej., vea la extensión de archivo temporal de Rsync y rsync, ¿crea un archivo temporal durante la transferencia? ) a menos que use la--inplaceopción. Solo les cambia el nombre después de que el archivo se haya transferido correctamente.rsynctambién elimina los archivos de destino que solo se transfirieron parcialmente (por ejemplo, debido a un disco lleno u otro error).También hay una
--remove-source-filesopción que elimina los archivos de origen después de que se hayan transferido correctamente. Vea larsyncpágina del manual para más detalles.Poniendo todo junto, podría usar algo como:
Esta opción es particularmente útil para tareas como mover archivos de una cola "entrante" o similar al directorio donde serán procesados.
Alternativamente, si este es un espejo de una sola vez, tal vez solo use
rsyncsin la--remove-source-filesopción. Puede eliminar los archivos de origen más adelante si lo desea / necesita.fuente
rsyncpodía hacer, y sabía que transfería archivos con un nombre temporal (a menos que lo use--inplace), así que busqué enman rsyncy encontrado--remove-source-files.rsynces una buena herramienta para verificar primero casi cualquier tarea de transferencia de archivos.