任何unix:
我有以下 cmd 行可以正常工作。
rsync -avr -e ssh /home/dir user@example.com:/home/
Run Code Online (Sandbox Code Playgroud)
但是我现在需要将它设置为 rsync 到只有一个 FTP 服务器的远程服务器。我该怎么做?
我查看了 rsync 帮助,但很快就迷路了(我不经常做这些事情)。
小智 174
由于其他人提到的原因,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"
Run Code Online (Sandbox Code Playgroud)
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
.
小智 28
根据您实际尝试执行的操作,可以使用另一种完全不同的方法curlftps
来安装 ftp 文件夹,然后可能rsync
是两个“本地”文件夹。
安装因您的发行版而异,因此我无法对此进行概括,但是您需要安装fuse
并且curlftpfs
(fuse
默认情况下Debian 已经安装了),然后:
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须确保之前已加载保险丝模块。
但请注意,有两件事:
curlftpfs
可能会失败(也许你可以用 做一些事情.netrc
)。Ian*_*ing 11
rsync 不能通过 ftp 工作。在远程端,它需要 rsync 守护进程或可以从中调用 rsync 的 shell。Ftp 通常允许您调用一些命令,而 rsync 不是其中之一。还有其他工具可用于自动执行 ftp 任务,例如“lftp”。
小智 5
我正在使用 GVFS/FTP。我使用 gigolo 安装远程 FTP 服务器。由于它们被视为本地目录,因此几乎所有处理本地文件的内容都可以工作。rsync 旨在远程计算文件哈希值以比较文件而不传输文件,但使用虚拟文件执行此操作无论如何都会传输文件。unison 和 freefilesync 通常工作良好,但当他们想要重命名您上传的文件时,我遇到了问题,下载没有问题。这可能是 gvfs 1.6.1 的问题。