题 如何通过FTP使用rsync


任何unix:

我有以下cmd线,工作正常。

rsync -avr -e ssh /home/dir user@example.com:/home/

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

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


175
2018-06-12 09:51




这类似于询问如何在IRC上使用HTTP,或者如何在SMTP上使用FTP ... - Juliano
也许你可以解释一下你想要做的一些推理,然后我们可以帮助你找到一个可行的解决方案。 - James
本质上我试图从共享托管服务器自动备份,并不明白rsync如何工作。我现在已经转移到了vps,并且不再受到ftp的限制 - bumperbox
双重性是你的上帝: scie.nti.st/2013/4/13/... - user956584
如果 部署 是的,你在想什么,你不介意NodeJS,退房 dploy,懒惰,并与git很好地配合 - Frank Nocke


答案:


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

但是,您可能想尝试一下 CSYNC。 IIRC它通过HTTP提供类似rsync的行为。我不能评论它是否适用于FTP,你必须尝试它。


76
2018-06-12 10:00



看着 csync网页,它支持sftp,但没有提到对普通ftp的支持。 - Keith Thompson


rsync的 由于其他人提到的原因,不适合你。 然而, lftp的 和 的ncftp 两者都有“镜像”模式,可能会满足您的需求。

我使用它将东西从我的本地目录推送到ftp或sftp web主机:

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"

156
2018-06-12 14:58



lftp非常好。另一个我刚刚发现的是 wput 它具有内置带宽限制功能。 - karmakaze


正如所写 画架lftp 是一个很好的工具。

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

exclude-glob

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

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

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

我已经更新了脚本 --delete defaut禁用该选项,通过取消注释来启用它 DELETE= command


118
2018-01-26 11:58



帮了我一大堆。但我不得不删除“set ftp:list-options -a;”搞乱的地方。 - mat
是否有类似的东西在SFTP(FTPS?)上做同样的事情? - trusktr
我之前会这样做 cd $RCD,以防止a-script-with-a-typo意外删除错误目录中的文件: set cmd:fail-exit yes。 (它似乎 lftp 没有注意到它实际上已经退出,直到你发出下一个命令。) - 之前 cd $LCD 我这样做(在本地shell中,即在脚本的顶部): set -eu。 - KajMagnus
实际上,我第一次运行脚本时,我还没有创建远程目录,因此脚本无法将CD刻录到该不存在的目录中。然后脚本开始了 mirror, 因此 --delete:d文件来自错误的目录。 (但我再次将它们复制回来,所以在这种情况下它并不重要。也许对其他人来说很重要。) - KajMagnus
除了关注@KajMagnus关于使用'set -eu'和'cd $ LCD'的建议之外,在'cd $ LCD'之前添加'mkdir -p $ LCD' - 这样你可以确定该目录存在并且你'在它里面。 - Paul Gear


根据您实际尝试的内容,可以使用另一种完全不同的方法 curlftps 安装一个ftp文件夹,然后也许 rsync 两个“本地”文件夹。

根据您的发行版安装不同,所以我无法概括,但您需要安装fuse 和 curlftpfs (Debian已经有了 fuse 默认安装),然后:

  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

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

但请注意两件事:

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

23
2017-12-11 12:39



FTP Fuse和rsync最接近问题,但除了一小部分小文件外,其他任何东西都显然是疯了。 - Steve-o
为什么会疯了?默认情况下rsync stat()s,它不会比较内容。这可以通过ls -l和ftp客户端来完成。 - ptman
我实际上尝试了这个(通过rsnapshot)并且它不起作用,每个文件都返回并且出错,表明rsync无法创建链接。因此,将lftp与rsnapshot结合使用就可以了 - Konstantin Pereiaslov
14.04 LTS完美无瑕;附加提示:当您准备卸载FTP站点时,只需使用即可 umount DIR 哪里 DIR 是你的 /path/to/ftp/folder 以上。 - Joe
2017年,这仍然有效!老实说,从FTP站点enmasse复制文件的最简单方法。在本地挂载,然后rsync就好像它是本地的一样 - td512


weex...

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


15
2017-08-17 14:38



像魅力一样工作!你像这样运行它: $ weex yourFTPconfigName 这是手册 linuxcertif.com/man/1/weex - sobi3ch


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


9
2018-06-12 10:03





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


8
2018-06-12 15:02



鉴于热气腾腾的一堆 鸵鸟政策触摸上带有一个十英尺极 SourceForge最近成了,也许你应该更新链接 项目的网页。 - HopelessN00b


对于你想要做的事情,你也可以使用wget。

wget -m FTP://用户名:password@domain.com


6
2018-02-25 18:12



这只会成为网站的一面镜子。您不能使用它来上传您的修改。 - David V.


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


5
2017-12-09 21:47



欢迎来到ServerFault!这可能是一个良好的开端,但更为技术性的细节可能是合理的,为什么这是一个更好的方法,并可能模拟如何做到这一点。 - Scott Pack


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


4
2017-11-29 17:55