bumperbox Asked: 2009-06-13 01:51:36 +0800 CST2009-06-13 01:51:36 +0800 CST 2009-06-13 01:51:36 +0800 CST 如何通过 FTP 使用 rsync 772 任何Unix: 我有以下 cmd 行,它工作正常。 rsync -avr -e ssh /home/dir user@example.com:/home/ 但我现在需要将其设置为 rsync 到只有一个 FTP 服务器的远程服务器。我该怎么做? 我查看了 rsync 帮助,但很快就迷路了(我不经常这样做)。 ftp rsync 18 个回答 Voted easel 2009-06-13T06:58:34+08:002009-06-13T06:58:34+08:00 由于其他人提到的原因, rsync对您不起作用。但是,lftp和ncftp都有可能满足您需要的“镜像”模式。 我使用它来将本地目录中的内容推送到 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" GabrieleV 2010-01-27T03:58:05+08:002010-01-27T03:58:05+08:00 用画架写的,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命令会失败,所以包括删除文件树的操作 将在错误的目录(root)进行! 我已经更新了脚本,以便--delete默认禁用该选项,通过取消注释来启用它DELETE= command。 Best Answer Martin M. 2009-06-13T02:00:21+08:002009-06-13T02:00:21+08:00 你没有。rsync 不能为您做到这一点,它是它自己的协议,不能通过 FTP 工作。 但是,您可能想尝试csync。IIRC 它通过 HTTP 提供类似 rsync 的行为。我无法评论它是否可以通过 FTP 工作,您必须尝试一下。 Pablo Olmos de Aguilera C. 2010-12-12T04:39:36+08:002010-12-12T04:39:36+08:00 根据您实际尝试执行的操作,可以使用另一种完全不同的方法curlftps来安装 ftp 文件夹,然后可能rsync是两个“本地”文件夹。 安装因您的发行版而异,因此我无法一概而论,但您需要安装fuse和curlftpfs(prolly Debian 默认已fuse安装),然后: sudo apt-get install curlftpfs 确保fuse模块已加载 ( modprobe fuse) 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)。 Johan 2009-08-18T06:38:38+08:002009-08-18T06:38:38+08:00 有... _ Weex 是一个实用程序,旨在自动执行远程维护网页或其他 FTP 存档的任务。它将通过根据需要执行上传和远程删除将一组本地文件同步到远程服务器。 Ian Kelling 2009-06-13T02:03:30+08:002009-06-13T02:03:30+08:00 rsync 不能通过 ftp 工作。在远程端,它需要 rsync 守护进程或可以从中调用 rsync 的 shell。Ftp 通常允许您调用一些命令,而 rsync 不是其中之一。还有其他用于自动执行 ftp 任务的工具,例如“lftp”。 Aaron 2010-02-26T10:12:05+08:002010-02-26T10:12:05+08:00 对于你想要做的事情,你也可以使用 wget。 wget -m ftp://username:password@domain.com pauska 2009-06-13T07:02:10+08:002009-06-13T07:02:10+08:00 这似乎是一个很好的自由选择:https ://savannah.gnu.org/projects/ftpsync/ shaftmx 2012-12-10T13:47:18+08:002012-12-10T13:47:18+08:00 您可以使用 curlftpfs 挂载 ftp 并在 http://linux.die.net/man/1/curlftpfs之后使用 rsync Papou 2012-11-30T09:55:07+08:002012-11-30T09:55:07+08:00 我正在使用 GVFS/FTP。我用 gigolo 挂载我的远程 FTP 服务器。由于它们被视为本地目录,因此几乎所有在本地文件上工作的东西都有效。rsync 旨在远程计算文件哈希以在不传输文件的情况下比较文件,但使用虚拟文件执行此操作无论如何都会传输文件。unison 和 freefilesync 通常运行良好,但是当他们想要重命名您上传的文件时遇到问题,下载没有问题。这可能是 gvfs 1.6.1 的问题。
由于其他人提到的原因, rsync对您不起作用。但是,lftp和ncftp都有可能满足您需要的“镜像”模式。
我使用它来将本地目录中的内容推送到 ftp 或 sftp 网络主机:
用画架写的,
lftp
是一个很好的工具。我建议你参数化脚本,并利用
选项,使用 shell 的 glob 功能 (*,? ..) 排除文件名:
警告:确保目标目录存在,否则cd命令会失败,所以包括删除文件树的操作 将在错误的目录(root)进行!
我已经更新了脚本,以便
--delete
默认禁用该选项,通过取消注释来启用它DELETE= command
。你没有。rsync 不能为您做到这一点,它是它自己的协议,不能通过 FTP 工作。
但是,您可能想尝试csync。IIRC 它通过 HTTP 提供类似 rsync 的行为。我无法评论它是否可以通过 FTP 工作,您必须尝试一下。
根据您实际尝试执行的操作,可以使用另一种完全不同的方法
curlftps
来安装 ftp 文件夹,然后可能rsync
是两个“本地”文件夹。安装因您的发行版而异,因此我无法一概而论,但您需要安装
fuse
和curlftpfs
(prolly Debian 默认已fuse
安装),然后:sudo apt-get install curlftpfs
确保
fuse
模块已加载 (modprobe fuse
)sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other
请注意,最后一个逗号后没有空格(这不是错字!)。如果您对此感到满意或不想每次都这样做,您可以将其添加到您的 fstab 中(通常在 中
/etc/fstab
):在这种情况下,您必须确保之前加载了保险丝模块。
但请注意,有两件事:
curlftpfs
可能会失败(也许你可以用 做一些事情.netrc
)。有... _
rsync 不能通过 ftp 工作。在远程端,它需要 rsync 守护进程或可以从中调用 rsync 的 shell。Ftp 通常允许您调用一些命令,而 rsync 不是其中之一。还有其他用于自动执行 ftp 任务的工具,例如“lftp”。
对于你想要做的事情,你也可以使用 wget。
wget -m ftp://username:password@domain.com
这似乎是一个很好的自由选择:https ://savannah.gnu.org/projects/ftpsync/
您可以使用 curlftpfs 挂载 ftp 并在 http://linux.die.net/man/1/curlftpfs之后使用 rsync
我正在使用 GVFS/FTP。我用 gigolo 挂载我的远程 FTP 服务器。由于它们被视为本地目录,因此几乎所有在本地文件上工作的东西都有效。rsync 旨在远程计算文件哈希以在不传输文件的情况下比较文件,但使用虚拟文件执行此操作无论如何都会传输文件。unison 和 freefilesync 通常运行良好,但是当他们想要重命名您上传的文件时遇到问题,下载没有问题。这可能是 gvfs 1.6.1 的问题。