将客户端文件与服务器同步-Electron / node.js

时间:2018-10-04 12:15:51

标签: npm synchronization electron webtorrent zsync

我的目标是制作一个Electron应用程序,该程序将客户端的文件夹与服务器同步。为了更清楚地解释它:

  1. 如果客户端的主机服务器上没有文件,则应用程序会将所有文件从服务器下载到客户端。
  2. 如果客户端具有文件,但是服务器上的某些文件已更新,则应用程序仅删除过时的文件(保留未修改的文件)并下载更新的文件。
  3. 如果文件已从主机服务器中删除,但存在于客户端文件夹中,则应用程序将删除该文件。

简单来说,应用程序必须确保客户端具有主机服务器文件夹的精确副本。

到目前为止,我是通过wget -m完成此操作的,但是wget经常无法识别出某些文件已更改,并使客户机留下了过时的文件。

最近我听说过zsync-windows和webtorrent npm软件包,但是我不确定哪种方法正确以及如何实际实现我的目标。感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

鉴于它是一个文件夹列表(因此具有简单的文件名而没有空格等),您可以使用以下代码选择文件名

# Get last item from each line of FILELIST
awk '{print $NF}' FILELIST | sort >weblist

# Generate a list of your files
find -type f -print | sort >mylist

# Compare results
comm -23 mylist weblist >diffs

# Remove old files
xargs -r echo rm -fv <diffs

您需要删除最后的echo才能允许rm工作

下次您要更新镜像时,可以修改comm行(通过交换两个文件参数)来查找您没有的文件集,并将其提供给{{1} }。

wget

答案 1 :(得分:0)

如果您具有对服务器的ssh访问权限,则可以通过Node.js软件包使用rsync

有一篇很好的文章here,介绍了如何实现此目的。

答案 2 :(得分:0)

您可以使用rsync,它广泛用于备份和镜像,并且可以用作日常使用的改进的复制命令。它提供了大量选项,可控制其行为的各个方面,并允许非常灵活地指定要复制的文件集。

它以其增量传输算法而著称,该算法通过仅发送源文件与目标中现有文件之间的差异来减少通过网络发送的数据量。

针对您的用例:

  1. 如果客户端的主机服务器上没有文件,则应用程序会将所有文件从服务器下载到客户端。这可以通过简单的 rsync 来实现。
  2. 如果客户端具有文件,但是服务器上的某些文件已更新,则应用程序仅删除过时的文件(保留未修改的文件)并下载更新的文件。使用: –删除源文件删除,取决于您是要从源还是目标中删除过时的文件。

  3. 如果文件已从主机服务器中删除,但存在于客户端文件夹中,则应用程序将删除该文件。使用:rsync的-删除选项。

    rsync -a-删除源目标

答案 3 :(得分:0)

rsync是一种好方法,但是您需要通过node.js访问它

这样的npm软件包可以帮助您: https://github.com/mattijs/node-rsync

但是在Windows系统上,事情会变得更加困难: How to get rsync command on windows?