¿Conseguir que rsync mueva el archivo de origen a destino?

15

¿Es rsync una buena opción para mi proyecto?

Tengo que:
- copiar archivos de la carpeta de origen a la de destino a través de SSH,
- asegurarme de que todos los archivos estén copiados,
- eliminar los archivos de origen después de la copia.
- Si tengo un nombre de conflicto, tengo que cambiar el nombre de los archivos.

Parece que puedo usar la opción: --remove-source-files (para eliminar archivos fuente)
Pero, ¿cómo rsync maneja los conflictos? ¿Puedo tener reglas?

Caso de uso en mi proyecto:

Ejecuto el cálculo científico en el servidor A y los resultados se insertan en la carpeta "proceso", para cada cálculo tengo un repositorio como este: / process / calc1.
Ahora me gustaría transferir el repositorio "/ calc1" al servidor B (obtengo / process / calc1) y borro "calc1" del servidor A.
... Durante otro cálculo obtengo "/ process / calc2" en el servidor A, la idea también es mover "calc2" en el directorio "/ process /" en el servidor B, entonces ahora tengo en el servidor B:
- / process / calc1
- / process / calc2
(y / process / en el servidor A está vacío).

¿Cómo gestionará rsync el conflicto (en el servidor B) si tengo otra carpeta como "/ process / calc1" en el servidor A después de un nuevo cálculo (si "/ process / calc1" ya existe en el servidor B)?

¿Es posible agregar reglas con rsync y cambiar el nombre de "/ process / calc1" por "process / calc1R2" en el servidor B? ¿Y así sucesivamente (ej: calc1R3)?

Gracias.

usuario44782
fuente

Respuestas:

11

Si realmente desea usar rsync, parece que necesitará una combinación de --backup, --backup-dir y --suffix. Lo más cerca que creo que podrías estar es con algo como esto

rsync -abv --suffix R1 --remove-source-files src/ dst/

Esto haría cerca de lo que desea, pero no cambiaría el nombre de los archivos exactamente como lo desea. La opción --suffix agrega texto al final de un archivo existente, pero solo lo hace para el primer conflicto. Si lo ejecuta de nuevo, simplemente sobrescribirá su primera copia de seguridad. Tendría que cambiar ese valor de sufijo cada vez que se ejecutara el comando, lo que funcionaría si usara algo con una marca de tiempo, como esta:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

No estoy seguro de si esto es excesivo para lo que está buscando, pero debería cumplir con sus requisitos.

Paul Kroon
fuente
Puedo tener archivos grandes después del cálculo, por lo que probablemente sea mejor usar rsync (en caso de problemas de red).
user44782
1

Como su nombre lo indica, rsync se usa para sincronizar archivos. Cuando se "sincroniza", esto significa que los archivos en el origen y el destino son los mismos. Eso no parece lo que quieres hacer.

Parece que solo quieres mover algunos archivos. No necesita usar rsync para eso. Parece que estás usando un Linux o BSD. Podrías usar mv -n sobre ssh. La opción -n no sobrescribe los archivos existentes. Esto no es 100% automático. Sin embargo, no veo cómo el archivo ya podría existir en su caso. Los archivos se copiarán del origen al destino y luego se eliminarán del origen. ¿Quieres volver a ejecutar los mismos cálculos? ¿Es por eso que terminarás con archivos con el mismo nombre? Sugeriría agregar un número de ejecución o lote al nombre de la carpeta. Querrías que eso quede claro de todos modos. ¿Tiene algún control sobre cómo se nombra la carpeta? ¿Más detalles? Recomiendo poner los comandos en un script bash o similar.

d -_- b
fuente
En algunos casos, tengo que ejecutar el mismo cálculo nuevamente (y por eso termino con archivos con el mismo nombre). Tiene razón, agregar una ejecución es una buena idea: en encontrar también el comando mmv -a (espero que funcione en modo ssh, ¿alguien ya usa esta línea de comando?). Tengo control sobre cómo se nombra la carpeta.
user44782
Lo más probable es que no esté instalado en la máquina. Sin embargo, si es su máquina, puede instalarla. Basado en Debian: sudo apt-get install mmv También puede buscar en sshfs o NFS y obtener archivos directamente al destino final. A menos que sea necesaria la ubicación intermedia (inspección, modificación, etc.). Si el enlace entre las dos máquinas no es confiable, es una mala idea, por supuesto. La sugerencia de Paul es buena. Sin embargo, agregar el número de ejecución al principio probablemente sería más organizado.
d -_- b
1
¿Cómo se usa "mv -n" sobre ssh? Puede usar mv sobre sshfs.
guettli
Ops ... Sí, eso lo hace más claro.
d -_- b
-1

Para SSH, en resumen, use esto:

Acceso a través de shell remoto:

Pull: rsync [OPCIÓN ...] [USUARIO @] HOST: SRC ... [DEST]

Push: rsync [OPCIÓN ...] SRC ... [USUARIO @] HOST: DEST

Todo se explica en rsync (1).

En cuanto a la secuencia de comandos para un cronjob, para rsync a través de ssh automáticamente sin requerir una contraseña, busque también en ssh-agent (1).


fuente