如何通过 FTP 使用 rsync

bum*_*box 201 rsync ftp

任何unix:

我有以下 cmd 行可以正常工作。

rsync -avr -e ssh /home/dir user@example.com:/home/
Run Code Online (Sandbox Code Playgroud)

但是我现在需要将它设置为 rsync 到只有一个 FTP 服务器的远程服务器。我该怎么做?

我查看了 rsync 帮助,但很快就迷路了(我不经常做这些事情)。

小智 174

由于其他人提到的原因,rsync对您不起作用。但是,lftpncftp都有可能满足您需求的“镜像”模式。

我使用它来将我本地目录中的内容推送到 ftp 或 sftp 网络主机:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
Run Code Online (Sandbox Code Playgroud)

  • lftp 很不错。我刚刚发现的另一个是`wput`,它具有内置的带宽限制。 (2认同)

Gab*_*leV 128

就像画架写的那样,lftp是一个很好的工具。

我建议你参数化脚本,并利用

exclude-glob
Run Code Online (Sandbox Code Playgroud)

选项,使用 shell 的 glob 特性 (*,? ..) 排除文件名:

exclude-glob
Run Code Online (Sandbox Code Playgroud)

警告:确保目标目录存在,否则 cd 命令将失败,因此 将在错误的目录(根)下进行包括删除文件树在内的操作!

我已更新脚本,以便--delete默认禁用该选项,通过取消注释DELETE= command.

  • 实际上,我第一次运行我的脚本时,我还没有创建远程目录,所以脚本无法 CD 到那个不存在的目录中。然后脚本开始`mirror`,因此`--delete`:d 文件来自错误的目录。(但我又把它们复制回来了,所以在那种情况下没关系。也许对其他人很重要。) (3认同)

Mar*_* M. 84

你没有。rsync 不能为您做到这一点,它是自己的协议,不能通过 FTP 工作。

但是,您可能想尝试csync。IIRC 它通过 HTTP 提供类似 rsync 的行为。我无法评论它是否可以通过 FTP 运行,您必须尝试一下。

  • 查看[csync网页](http://www.csync.org/),它支持sftp,但没有提到对普通ftp的支持。 (3认同)

小智 28

根据您实际尝试执行的操作,可以使用另一种完全不同的方法curlftps来安装 ftp 文件夹,然后可能rsync是两个“本地”文件夹。

安装因您的发行版而异,因此我无法对此进行概括,但是您需要安装fuse并且curlftpfsfuse默认情况下Debian 已经安装了),然后:

  1. sudo apt-get install curlftpfs

  2. 确保fuse模块已加载 ( modprobe fuse)

  3. sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

请注意,最后一个逗号后没有空格(这不是打字错误!)。如果您对此感到满意或不想每次都这样做,则可以将其添加到 fstab(通常在 中/etc/fstab):

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您必须确保之前已加载保险丝模块。

但请注意,有两件事:

  • 开发者在一两年前放弃了该项目,所以我暂时不知道如何使用/稳定。
  • 如果密码包含一个奇怪的字符curlftpfs可能会失败(也许你可以用 做一些事情.netrc)。

  • 2017,这仍然有效!老实说,这是从 FTP 站点集中复制文件的最简单方法。在本地挂载,然后 rsync 就好像它是本地的一样 (2认同)

Joh*_*han 17

weex ...

Weex 是一个实用程序,旨在自动执行远程维护网页或其他 FTP 存档的任务。它将根据需要执行上传和远程删除,将一组本地文件同步到远程服务器。

  • 像魅力一样工作!你像这样运行它:`$ weex yourFTPconfigName` 这里是手册 http://www.linuxcertif.com/man/1/weex/ (2认同)

Ian*_*ing 11

rsync 不能通过 ftp 工作。在远程端,它需要 rsync 守护进程或可以从中调用 rsync 的 shell。Ftp 通常允许您调用一些命令,而 rsync 不是其中之一。还有其他工具可用于自动执行 ftp 任务,例如“lftp”。


小智 9

对于看起来您正在尝试做的事情,您也可以使用 wget。

wget -m ftp://username:password@domain.com


pau*_*ska 8

这似乎是一个很好的免费搭配:https : //savannah.gnu.org/projects/ftpsync/


小智 5

我正在使用 GVFS/FTP。我使用 gigolo 安装远程 FTP 服务器。由于它们被视为本地目录,因此几乎所有处理本地文件的内容都可以工作。rsync 旨在远程计算文件哈希值以比较文件而不传输文件,但使用虚拟文件执行此操作无论如何都会传输文件。unison 和 freefilesync 通常工作良好,但当他们想要重命名您上传的文件时,我遇到了问题,下载没有问题。这可能是 gvfs 1.6.1 的问题。


小智 5

可以使用 curlftpfs 挂载 ftp 并在http://linux.die.net/man/1/curlftpfs之后使用 rsync