让我解释一下树结构:我有一个网络目录,我们的数据库每天都会复制几次新的 .txt 文件。这些文件位于基于用户名的目录中。在本地磁盘上,我具有相同的结构(基于用户名的目录),并且需要使用最新的 .txt 文件进行更新。这不是同步过程:我将远程文件复制到本地目标,我不关心此后会发生什么,所以我不需要保持它同步。但是,我确实需要仅复制新文件,而不是我已经复制的文件。它看起来像:
远程磁盘
/mnt/远程/数据库
+ 用户1/
+ 用户2/
+ 用户3/
+ 用户4/
本地盘
/var/数据库
+ 用户1/
+ 用户2/
+ 用户3/
+ 用户4/
我和
一起玩find /mnt/remote/database/ -type f -mtime +1
和其他变体,但效果不是很好。
所以,我想弄清楚的脚本如下:
1-递归检查/mnt/remote/database中的*.txt
2-检查文件日期以查看它们是否是新的(自上次检查以来,也许维护一个文本文件,并以上次检查的时间作为参考?)
3-如果文件是新的,请将其复制到 /var/database 中的正确目标(因此 /mnt/remote/database/user1/somefile.txt 将复制到 /var/database/user1/)
我将通过 cron 作业运行脚本。
我现在正在用 C 语言做这件事,但是 IT 人员不太擅长调试或编写 C 语言,如果他们需要添加或修复某些东西,他们可以更好地处理 bash 脚本,而我不太擅长。
有什么想法吗?
谢谢你!
您可以考虑在输入和输出目录之间使用本地 rsync。它具有您想要的所有选项,使其同步策略非常灵活。
find /mnt/remote/database/ -type f -newer $TIMESTAMP_FILE | xargs $CP_COMMAND
touch $TIMESTAMP_FILE
编辑:原始链接早已消失。重定向到 Wayback 机器。
解决方案在这里: