我有一台服务器,通过FTP将文件传输到某个位置。从转移开始(2015年1月)开始,所有文件都在那里。 我想制作一个新服务器并从第一个服务器的位置传输文件。 基本上,我需要一个cron作业来运行scp并且自上次运行以来只传输新文件。
使用ssh的服务器之间的连接正常,我可以在服务器之间无需重新传输文件。 如何在Ubuntu中实现这一目标?
与另一个问题的可能重复不符合,因为在我的目标服务器上我将只有一个文件,我应该保留最后一个cron运行的日期,并且将解析将从第一个服务器复制的文件,事后删除。
rsync只会确保两个服务器中都存在所有文件,对吗?
答案 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