仅使用 FTP 和命令行获得文件夹的两个精确副本

仅使用 FTP 和命令行获得文件夹的两个精确副本

我正在寻找任何解决方案,使我能够仅使用 FTP 协议和命令行来模拟类似于 Dropbox/rsync 的功能。

一般问题是,我必须在非常有限的 Linux(实际上是 NAS)上运行它,所以我无法安装/使用复杂的解决方案(没有足够的资源来运行)和/或 GUI 实用程序,因为我没有 GUI那里。 SSH 在该 NAS 上的运行效果也很弱,并且在目标之一上根本不存在。

我需要的是有一个命令行(bash)脚本或程序,我将能够定期运行(通过 CRON),以确保sourcedestination是相同的:

  • 双方的所有文件都复制到双方,
  • 如果存在两个同名文件,则将文件的最新版本复制到双方,
  • 在一侧删除另一侧丢失的所有文件。

当然,这个解决方案必须支持源和目标的所有子文件夹的迭代,才能成功工作——两侧都会有一个大的目录结构。

我尝试过许多备份解决方案,但大多数都因以下原因之一而失败:

  • 无法创建双方的精确副本并提供增量备份,
  • 在非常有限的 Linux 发行版上无法直接从命令行运行。

有人建议我使用 Unison 并好好尝试一下。这看起来确实不错,但它使用 SSH,并且我无法与我的目的地之一建立 SSH 连接(不支持)——即 FTP 访问是唯一可用的方式。

对我来说,完美的解决方案是我可以运行的任何东西(命令行或配置),如下所示:

something.sh path/to/local/folder ftp://user:[email protected]/path/to/folder

如果它真的存在的话......

答案1

lftp有一个mirror命令(以及mirror -R倒车镜)。

答案2

一件一般性的事情:据我所知,ftp 不能用于设置远程时间戳,因为协议不支持这一点。但是,这对于您的情况来说是可以的,因为您只想确保传输比服务器上更新的数据,而其余的则保留。

我认为您可以rsync使用fuse 和curlftpfs 与ftp 一起使用。首先,在本地挂载 ftp 文件系统:

curlftpfs -o user=username:password ftp://whatever.ftp/ mountpoint/

然后,使用rsync本地镜像的常规方式:

rsync -azv source mountpoint/whatever/dir/

rsync 是一个功能强大的工具,具有许多选项来微调文件夹和文件的同步。

另外一个选择:wput ;这(我认为是与 wget 相对应的)可以比较使用远程和本地时间戳-N选项。此外,wput 递归地传输目录,所以我认为这实际上是您正在寻找的解决方案。例子:

wput somedir ftp://user:[email protected]/remote/dir/

将在远程服务器上创建“somedir/”的镜像。如果重新运行该命令而不修改本地 somedir,则不会传输更多文件。

相关内容