创建这些文件时通过网络复制文件

创建这些文件时通过网络复制文件

我的情况:我想将文件从一台电脑复制到另一台电脑。不幸的是,这个文件不完整。有一个过程正在将数据附加到这个文件(仅在最后)。

有没有一种方法可以轻松地复制此文件,而不必每次复制工具认为完成时都从头开始?

例如,是否有可能告诉 scp/rsync/whatever 等工具在下载完成后等待 20 秒 - 如果文件发生变化,只需下载这一额外的数据?

或者有没有办法让下载从字节 X 开始?

有人知道解决办法吗?提前谢谢!

答案1

最好的方法是让创建文件的进程同时创建远程文件。要么直接写入远程位置,要么使用类似方法将tee数据同时传输到ssh连接和本地文件。不过,这应该在启动进程时完成。

由于文件已经创建,所以您可以使用rsync它。默认情况下,rsync只复制更新的数据,因此如果您rsync每隔几分钟运行一次,您就会得到您想要的。您可以使用强力方法:

while :; do rsync -u source destination; sleep 20; done

它将无限循环运行,只有不同时才会复制source到。创建文件的过程完成后,您可以使用+停止它。destinationsourceCtrlC

更优雅的方法是监视文件。如果正在创建machineA并复制到machineB,您可以从以下位置执行此操作machineB(假设您已ssh设置无密码):

while [[ $(ssh machineA md5sum < /path/to/file) != $(md5sum < /path/to/file) ]] do 
    rsync -uv aa b
    sleep 20
done

请注意,当两个文件第一次相同时,此操作将停止。如果您的文件创建过程超过 20 秒没有写入然后恢复,则必须再次手动复制。

答案2

你可能会考虑使用因克龙为您同步当文件改变时运行,即修改中,如果您需要的是长期文件同步。

http://www.linux-magazine.com/Issues/2014/158/Monitoring-with-incron

http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

http://manpages.ubuntu.com/manpages/intrepid/man5/incrontab.5.html

如果是短期的,terdon 的最后一个 while 循环可能会更快地设置。

相关内容