5

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

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

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

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

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

4

4 回答 4

2

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

像这样的 npm 包可能会对您有所帮助: https ://github.com/mattijs/node-rsync

但是在 Windows 系统上事情会变得稍微困难​​一些: How to get rsync command on windows?

于 2019-12-04T00:21:27.303 回答
0

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

# 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行(通过交换两个文件参数)以找到您没有的文件集,并将这些文件提供给wget.

或者

rsync -av --delete https://mirror.abcd.org/xyz/xyz-folder/ my-client-xyz-directory/
于 2019-12-03T11:26:40.743 回答
0

如果您可以通过 ssh 访问服务器,则可以通过 Node.js 包使用rsync 。

这里有一篇关于如何实现这一点的好文章。

于 2019-11-28T16:08:22.100 回答
0

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

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

对于您的用例:

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

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

    rsync -a --删除源目标

于 2019-12-03T12:43:24.893 回答