version corta
Me gustaría sincronizar un directorio remoto, cuyo nombre cambia. Algo como (¡no funciona!):
rsync -a '[email protected]:~/.zfs/snashots/$(ls -d Automatic-* | tail -1)/foo' ~/foo
versión más larga/fondo
Tengo un disco duro con acceso a Internet (Caja de almacenamiento Hetzner), que crea periódicamente instantáneas ZFS. Puedo acceder a las instantáneas dentro del /.zfs/snapshots
directorio. Para cada instantánea hay un subdirectorio que lleva el nombre de un patrón como Automatic-<timestamp>
:
$ ls /.zfs/snapshots
Automatic-2021-10-01T00-25-22 Automatic-2021-12-01T00-23-14 Automatic-2022-02-01T00-21-38
Cada una de estas carpetas contiene un estado congelado de mis archivos en el momento de la creación de la instantánea. Me gustaría reflejar periódicamente el contenido de la carpeta más reciente en mi servidor doméstico, porque esta carpeta contiene el último estado "congelado" de mis archivos. Debido a que el patrón de marca de tiempo se puede ordenar, la carpeta más reciente podría, por ejemplo, consultarse mediante el siguiente comando:
$ ls -d Automatic-* | tail -1
Automatic-2022-04-01T00-24-16
¿Existe alguna posibilidad de decirle a rsync cómo obtener el directorio de origen remoto "más reciente"?
No he probado la sustitución de comandos de mi ejemplo anterior, pero creo que no funcionaría con rsync. Sin embargo, he intentado crear un enlace simbólico ( ln -s '/path/to/$(ls -d Automatic-* | tail -1)/foo' /target
). Sin embargo, el ln
comando resuelve la ruta en el momento de la creación y no en el acceso.
¿Alguna idea?
Respuesta1
Encontré una posible solución para mis necesidades. Escribí un script que consulta la carpeta requerida antes de la sincronización:
#!/bin/bash
LATEST_SNAPSHOT=$(ssh xxx.your-storagebox.de 'ls .zfs/snapshot/' | tail -1)
rsync -a "xxx.your-storagebox.de:.zfs/snapshot/${LATEST_SNAPSHOT}" /target