无需 rsync 同步两个目录

无需 rsync 同步两个目录

我知道你现在在想什么”只需使用rsync” 但不幸的是这个系统没有 rsync,我想提出另一个解决方案。

设置

  1. 源服务器有一个包含 140 000 多个文件的上传文件夹(无子目录)
  2. 目标服务器需要包含 140 000+ 文件的上传文件夹

让我们称之为仅用便利贴进行迁移...现在让事情变得复杂的是,由于生成了新的上传或缩略图,服务器 1 每天都会不断获取新文件,因此您现在脑海中浮现出这个想法“只需将文件从 1 复制到 2“将不起作用,因为一旦我完成了大约 20+GB 的副本,我就可以重新开始,因为源服务器上已经有新文件......

我的解决方案想法

  • 将完整文件夹从源复制到目标
  • 在目标服务器中查找最新的创建日期并用作源服务器上的起点
  • 将自上次创建日期以来的所有文件从源复制到目标(增量)
  • 设置一个 cron 来尽可能频繁地执行此操作。

我的问题

find /uploads/* -mtime -1 bash: /bin/find: Argument list too long

现在,在我开始编写 bash 脚本循环之前,我想知道是否有人可以建议另一种无需 bash 脚本即可完成此操作的方法...良好的旧低级 CLI。

答案1

我已经设法找到解决方案,但还没有找到解决方案。我仍在努力。

假设您可以信任文件系统创建/修改日期,则可以使用 find 生成文件列表,将其输出到文本文件中,然后使用循环对目标服务器执行 scp。我似乎无法将查找结果直接正确地发送到 scp 。

我使用了一个辅助程序sshpass,但我知道最好使用密钥文件

从目标服务器查找源服务器中的文件并保存结果,将结果限制为仅一个目录和文件。

sshpass -p 'MyPassword' ssh [user@server] "find [path/to/look/in] -maxdepth 1 -mtime -1 -type f" > /tmp/last-24-hours-file-list.txt

循环输出文件并调用每个文件的 scp

while read filename; do sshpass -p 'MyPassword' scp -Crpv [user@server]:$filename [path/to/save/to]; done < /tmp/last-24-hours-file-list.txt

相关内容