简洁版本
我想同步名称发生变化的远程目录。例如(不工作!):
rsync -a '[email protected]:~/.zfs/snashots/$(ls -d Automatic-* | tail -1)/foo' ~/foo
较长版本/背景
我有一个可访问互联网的硬盘(Hetzner 储物盒),它会定期创建 ZFS 快照。我可以访问目录中的快照/.zfs/snapshots
。每个快照都有一个以如下模式命名的子目录Automatic-<timestamp>
:
$ ls /.zfs/snapshots
Automatic-2021-10-01T00-25-22 Automatic-2021-12-01T00-23-14 Automatic-2022-02-01T00-21-38
每个文件夹都包含创建快照时我的文件的冻结状态。我希望定期将最新文件夹的内容镜像到我的主服务器,因为此文件夹包含我的文件的最新“冻结”状态。由于时间戳模式是可排序的,因此可以通过以下命令查询最新文件夹:
$ ls -d Automatic-* | tail -1
Automatic-2022-04-01T00-24-16
是否有可能告诉 rsync 如何获取“最新”的远程源目录?
我还没有尝试过上面示例中的命令替换 - 但我认为这不适用于 rsync。但是我尝试过创建一个符号链接 ( ln -s '/path/to/$(ls -d Automatic-* | tail -1)/foo' /target
)。但是该ln
命令在创建时解析路径,而不是在访问时解析路径。
任何想法?
答案1
我找到了一个可以满足我需求的解决方案。我编写了一个脚本,它在同步之前查询所需的文件夹:
#!/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