按创build时间在服务器之间复制文件

我的bash脚本知识是非常薄弱的​​,这就是为什么我在这里求助。 什么是最有效的bash脚本根据性能来查找和复制文件从一个LINUX服务器到另一个使用规格说明如下。

我需要一个bash脚本,它只能在0到10分钟之间的时间间隔内,在名称为“Z”的目录中find在服务器A中创build的文件。 然后将它们传输到服务器B.我认为这可以通过格式化查询并为每个创build的新文件执行“scp /X/Y…/Z/file root @ hostname:/ X / Y … / Z /“如果脚本在服务器B上找不到这样的远程path,它将继续复制第二个文件存在的目录。 文件应该复制权限,组,所有者和创build时间。

X / Y …是各种目录path。 我想设置一个cron作业来每10分钟执行一次这个脚本。 所以在这种情况下performance是非常重要的。

谢谢。

rsync可能适合您的需要。 在脚本编写糟糕的副本之前检查rsync。 否则,可以使用find命令来查找基于名称和年龄的文件,然后在find的文件上运行scp命令。

for d in $(find . -type d -name Z); do find $d -maxdepth 1 -type f -amin -10 -print0 | rsync -av --files-from=- --from0 ./ root@hostname:; done

rsync是你最好的select,将是最优化的。 具体来说,您要确保使用-t选项来保留时间,但-a选项(包含-t归档文件)通常是最好的起点。 (如果您使用的是Mac OS X,最好还包括-E选项以保留扩展属性和资源分叉。)阅读手册页,使用-n / --dry-run选项执行所有testing,以便你实际上并没有对磁盘做任何改变,并且要注意你在改变rsync的行为时如何使用或省略目录名称的尾部斜线。

不幸的是, find不起作用,因为大多数平台上的实现只能将时间与“date”的粒度进行比较(不幸的是,舍入),因此您将无法查找最近10分钟内创build的文件。

因此,许多rsync cron作业或执行所有必要rsync的脚本是最好的select。 如果你有很多的小文件需要同步,10分钟的时间可能会太短,但这一切都取决于你的具体数据集,所以做一些testing。 当然,初始同步会花费更长时间,因此在安排您的cron作业之前手动执行它。