Sincronizar ficheros con SFTP y rsync en homelab
Este post documenta un flujo de sincronizacion con SFTP y rsync: descarga, subida, borrado controlado, historico y logs.
Flujo recomendado
- Descargar ficheros remotos a directorio temporal.
- Validar que la descarga contiene lo esperado.
- Subir/copiar al destino final.
- Mover los ficheros procesados a historico.
- Borrar en origen solo si todo lo anterior ha ido bien.
Directorios
1
2
3
4
| IN="/srv/sftp/in"
OUT="/srv/sftp/out"
HIST="/srv/sftp/hist/$(date +%Y%m%d_%H%M%S)"
LOG="/var/log/sftp-rsync.log"
|
SFTP batch
1
2
3
4
| cd /remoto/out
mget *
rm *
bye
|
Ejecutar:
1
| sftp -b batch.sftp <USUARIO>@<HOSTNAME>
|
Rsync a destino
1
| rsync -avh --remove-source-files "$OUT/" <USUARIO>@<HOSTNAME>:/destino/
|
Historico
1
2
| mkdir -p "$HIST"
find "$OUT" -type f -print0 | xargs -0 -I{} mv {} "$HIST/"
|
Log sencillo
1
2
3
| printf '[%s] Comienza SFTP\n' "$(date --iso-8601=seconds)" >> "$LOG"
printf '[%s] Finaliza descarga\n' "$(date --iso-8601=seconds)" >> "$LOG"
printf '[%s] Finaliza limpieza remota\n' "$(date --iso-8601=seconds)" >> "$LOG"
|
Precauciones
- Evitar
rm .* y patrones ambiguos. - Usar directorios temporales por ejecucion.
- No borrar remoto si falla la copia al destino.
- Registrar fecha, host, numero de ficheros y codigo de salida.