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:
rsync
copias 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--inplace
opción. Solo les cambia el nombre después de que el archivo se haya transferido correctamente.rsync
tambié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-files
opción que elimina los archivos de origen después de que se hayan transferido correctamente. Vea larsync
pá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
rsync
sin la--remove-source-files
opción. Puede eliminar los archivos de origen más adelante si lo desea / necesita.fuente
rsync
podía hacer, y sabía que transfería archivos con un nombre temporal (a menos que lo use--inplace
), así que busqué enman rsync
y encontrado--remove-source-files
.rsync
es una buena herramienta para verificar primero casi cualquier tarea de transferencia de archivos.