我有一台服务器,文件通过 FTP 传输到某个位置。自传输开始(2015 年 1 月)以来,所有文件都在那里。 我想制作一个新服务器并从第一个服务器的位置传输文件。 基本上,我需要一个 cron 作业来运行 scp 并仅传输自上次运行以来的新文件。
使用 ssh 的服务器之间的连接正常,我可以在服务器之间无限制地传输文件。 我怎样才能在 Ubuntu 中实现这一目标?
可能与另一个问题重复的问题是站不住脚的,因为在我的目标服务器上,我只有一个文件,我应该在其中保留上次 cron 运行的日期,并且将从第一台服务器复制的文件将被解析和之后删除。
rsync 将简单地确保所有文件都存在于两个服务器中,对吗?
最佳答案
我设法使用以下方法在远程计算机上设置 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
关于Linux - 仅将新文件从一台服务器复制到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33894426/