我试图从超过十分钟的远程目录中提取所有内容,然后删除源文件。
我的远程查找似乎正在工作(在远程框上独立测试),但是当 rsync 去使用它时,我的用户的主路径被添加到查找输出的前缀,如下所示:
rsync -avz --dry-run --remove-source-files --files-from=<(ssh spot@host "find /mnt/volume_2/partners/test/uploads/ -amin +10 -type f,d -print0") spot@host:. .
receiving incremental file list
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1054" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1105" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1105/subfile-1105" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1101" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1056" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1058" failed: No such file or directory (2)
我花了比我愿意承认的更多的时间来尝试解决这个问题,但没有成功。我希望这里有人能给我指明正确的方向。
谢谢你!
答案1
rsync 查看的是错误的位置,因为这些路径是相对的(来自 rsync 手册页,重点是我的):
--files-from=文件
[...]
从 FILE 读取的文件名都是相对于源目录
任何一个发送绝对路径到文件来自选项,但是不要另外定义源目录除了根目录 (/) 之外。这应该可行 - 我在主机名后替换了一个字符:
rsync -avz --dry-run --remove-source-files --from0 --files-from=<(ssh spot@host "find /mnt/volume_2/partners/test/uploads/ -amin +10 -type f,d -print0") spot@host:/ .
或者- 当你真正想处理目标中的相对路径时尤其有用 -告诉 find 发出相对路径并实际使用它们:
ssh spot@host "cd /mnt/volume_2/partners/test/uploads/; find -amin +10 -type f,d -print0" | rsync -avz --dry-run --remove-source-files --from0 --files-from=- spot@host:/mnt/volume_sfo2_01/partners/test/uploads/ .
注意,我将<()
重定向切换到普通|
管道,以获得更好的互操作性和更少的意外,同时转义命令以包含在脚本中。我还在--from0
您的评论之上添加了内容,因为输入现在是空分隔的,因此告诉同步是的。