Linux - 仅将新文件从一台服务器复制到另一台服务器

时间:2015-11-24 13:02:09

标签: linux ubuntu cron scp

我有一台服务器,通过FTP将文件传输到某个位置。从转移开始(2015年1月)开始,所有文件都在那里。 我想制作一个新服务器并从第一个服务器的位置传输文件。 基本上,我需要一个cron作业来运行scp并且自上次运行以来只传输新文件。

使用ssh的服务器之间的连接正常,我可以在服务器之间无需重新传输文件。 如何在Ubuntu中实现这一目标?

与另一个问题的可能重复不符合,因为在我的目标服务器上我将只有一个文件,我应该保留最后一个cron运行的日期,并且将解析将从第一个服务器复制的文件,事后删除。

rsync只会确保两个服务器中都存在所有文件,对吗?

1 个答案:

答案 0 :(得分:0)

我设法使用以下命令在远程计算机上设置cron作业:

我首先创建了一个时间戳文件,该文件将保留cron作业运行时的最后一个时间戳:

touch timestamp

然后我用ssh和scp命令复制所有文件:

ssh username@remote find <files_path> -type f -newer timestamp | xargs -i scp -i username@remote:'{}' <local_path>

然后我用新的修改时间触摸时间戳文件:

touch -m timestamp

此脚本的唯一问题是,如果在第二次触摸时间戳之前在ssh运行期间将文件复制到远程主机,则稍后运行时将忽略此文件。

稍后编辑: 为确保时间戳文件与实际运行之间没有间隙,因为ssh命令的持续时间,脚本已更改为:

touch timestamp_new
ssh username@remote find <files_path> -type f -newer timestamp | xargs -i scp -i username@remote:'{}' <local_path>
rm -rf timestamp
mv timestamp_new timestamp