任何Unix:
我有下面的cmd行,效果很好。
rsync -avr -e ssh /home/dir user@example.com:/home/
但是我现在需要将其设置为rsync到只有FTP服务器的远程服务器。我该怎么办?
我查看了rsync帮助,但很快就迷路了(我不经常这样做)。
任何Unix:
我有下面的cmd行,效果很好。
rsync -avr -e ssh /home/dir user@example.com:/home/
但是我现在需要将其设置为rsync到只有FTP服务器的远程服务器。我该怎么办?
我查看了rsync帮助,但很快就迷路了(我不经常这样做)。
Answers:
你不知道 rsync不能为您做到这一点,它是它自己的协议,不能在FTP上运行。
但是,您可能想尝试csync。IIRC通过HTTP提供类似rsync的行为。我无法评论它是否可以在FTP上运行,您必须尝试一下。
由于其他人提到的原因,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"
wput
内置带宽限制。
如画架所写,lftp
是一个很好的工具。
我建议您对脚本进行参数化,并利用
exclude-glob
选项,不包括使用Shell的全局功能(* ,? ..)的文件名:
#!/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
。
cd $RCD
,以防止a-script-with-a-typo意外删除错误目录中的文件:set cmd:fail-exit yes
。(似乎lftp
没有注意到,它实际上已经退出,直到发出下一条命令。) -而在此之前cd $LCD
我会做到这一点(在当地壳,也就是在纸条的顶部): set -eu
。
mirror
,并且--delete
从错误的目录开始:d文件。(但是我又将它们复制回去,所以在这种情况下没关系。也许对其他人来说很重要。)
根据您实际要执行的操作,可以使用另一种完全不同的方法curlftps
来安装ftp文件夹,然后挂载rsync
两个“本地”文件夹。
安装因发行版本而异,因此我无法一概而论,但是您需要安装fuse
and curlftpfs
(fuse
默认情况下,prolly 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
在这种情况下,您必须确保已装入保险丝模块。
但是,请注意以下两点:
curlftpfs
可能会失败(也许您可以使用进行某些操作.netrc
)。umount DIR
其中DIR
是你/path/to/ftp/folder
上面。
有weex ...
Weex是一种实用工具,旨在自动执行远程维护网页或其他FTP存档的任务。通过根据需要执行上载和远程删除,它将同步一组本地文件到远程服务器。
$ weex yourFTPconfigName
这是手册linuxcertif.com/man/1/weex
rsync无法在ftp上运行。在远程端,它需要rsync守护程序或可以从中调用rsync的外壳。Ftp通常允许您调用一些命令,而rsync不是其中之一。还有其他一些工具可以自动执行ftp任务,例如“ lftp”。
这似乎是一种很好的免费选择:https : //savannah.gnu.org/projects/ftpsync/
您可以在http://linux.die.net/man/1/curlftpfs之后使用curlftpfs挂载ftp并使用rsync
如果要自动化任务,请使用lftp,因为您可以创建脚本(如上一些人所述),如果您需要一次性解决方案(即,您需要下载整个网站),则可以按照自己的喜好轻松编写所有脚本通过ftp /将其移动到另一台服务器)使用ncftp,方法很简单,如果尚未安装,请安装:
apt-get install ncftp
要么
yum install ncftp
(对不起,非基于debian / red hat的发行版。)
安装完成后,在终端中打开ncftp,然后键入:
open -u ftpusername ftp.thedomain.com
它将要求您输入密码,输入密码,然后:
get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/
它将为您完成剩下的工作..祝您好运
使用“ sitecopy”或“ mirror”可以节省大量带宽。
它们都处理有效的增量更新。
还有wput:
wput --timestamping --reupload --dont-continue source-files ftp://target.host/dir
用户名和密码是从〜/ .netrc中读取的。否则,如果您不特别关注安全性,则可以将它们提供为ftp:// username:password@target.host。
为此,我制作了自己的命令行工具: ftpsync
为什么?因为它简单而优雅,所以其他工具需要很多依赖,有时需要编译,有时不起作用(例如MacOs High Sierra上的lftp)。Ftpsync是用纯Python编写的,不需要第三方库并且它很小,您可以在项目中包含该文件。
用法:cd到您的项目目录并键入:
ftpsync user:pass@ftp.address.url/remote/dir --delete
--delete
代表删除本地不存在的远程文件。
如果您不想同步而只运行原始ftp命令,请使用:
ftpsync -c '...'
对于一些简单的操作(例如发送文件并重命名)很有用:
ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
安装sftp,然后可以使用rsync。
我用下面的一个。
rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/