我有下面的cmd行,工作正常。
rsync -avr -e ssh /home/dir user@example.com:/home/
但是我现在需要将其设置为rsync到远程服务器上只有一个FTP服务器。
我该怎么办?
我看了看rsync帮助,但很快就迷路了(我不经常这样做)。
#1 楼
你不知道rsync不能为您做到这一点,它本身就是一个协议,不能在FTP上运行。但是,您可能想尝试csync。 IIRC通过HTTP提供类似rsync的行为。我无法评论它是否可以在FTP上运行,您必须尝试一下。
评论
查看csync网页,它支持sftp,但是没有提及对纯ftp的支持。
–基思·汤普森(Keith Thompson)
2014年7月11日在2:06
#2 楼
由于其他人提到的原因,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"
评论
lftp非常好。我刚刚发现的另一个是内置带宽限制的wput。
– Karmakaze
13年7月17日在6:46
我建议添加“ set ftp:use-mdtm-overloaded true”,以将文件mtime设置为与原始文件相同(应该使用另一种方式,即无反向)。
– MarcRechté
5月29日12:43
#3 楼
正如画架所写,lftp
是一个很好的工具。我建议您对脚本进行参数化,并使用
exclude-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命令将失败,因此包括删除文件树的操作将在错误的目录(根目录)中进行!
我已更新了脚本,因此defaut已禁用
--delete
选项,请取消对DELETE= command
的注释使其启用。评论
帮助了我一大堆。但是我不得不删除“ set ftp:list-options -a;”哪儿乱七八糟的东西。
–垫
10 Nov 16 '20:33
是否存在通过SFTP(FTPS)执行相同操作的类似内容?
–trusktr
2012-3-14的2:52
我会在cd $ RCD之前执行此操作,以防止a-script-with-typo意外删除错误目录中的文件:set cmd:fail-exit yes。 (在您发出下一个命令之前,lftp似乎没有注意到它实际上已经退出了。)—在cd $ LCD之前,我要这样做(在本地外壳中,即在脚本的顶部):设置-eu。
– KajMagnus
2012年6月28日在21:05
实际上,第一次运行脚本时,我还没有创建远程目录,因此该脚本无法CD到该不存在的目录中。然后脚本开始镜像,因此从错误的目录中删除了--d文件。 (但是我又将它们复制回去,所以在这种情况下没关系。也许对其他人来说很重要。)
– KajMagnus
2012年6月28日在22:09
遵循@KajMagnus关于使用'set -eu'和'cd $ LCD'的建议,在'cd $ LCD'之前添加'mkdir -p $ LCD'-这样,您可以确保目录存在并且您在里面。
– Paul Gear
13年3月19日在22:04
#4 楼
根据您实际要执行的操作,另一种完全不同的方法是使用curlftps
挂载ftp文件夹,然后rsync
挂载两个“本地”文件夹。安装方式因您的发行版,因此我无法一概而论,但是您需要安装
fuse
和curlftpfs
(默认情况下,prolly Debian已经安装了fuse
),然后:sudo apt-get install curlftpfs
确保已加载
fuse
模块(modprobe fuse
)。请注意,最后一个逗号后没有空格(这不是错字!)。如果您对此感到满意或不想每次都这样做,则可以将其添加到fstab中(通常在sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other
中):curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0
情况下,您必须确保保险丝模块已预先装入。
但是,有两点要注意:
开发人员放弃了一个或一个项目。两年前,所以我暂时不知道它的可用性/稳定性。
如果密码中包含一个奇怪的字符
/etc/fstab
可能会失败(也许您可以对curlftpfs
进行一些操作)。评论
FTP Fuse和rsync最接近这个问题,但是除了少数小文件之外,其他任何东西显然都很疯狂。
– Steve-o
2011年9月23日在21:03
为什么会疯呢?默认情况下,rsync stat()s不比较内容。这可以通过ls -l和ftp客户端来完成。
–ptman
2011-12-30 11:21
我实际上尝试了此操作(通过rsnapshot),但它不起作用,每个文件都返回了并且出错,表明rsync无法创建链接。因此,结合使用lftp和rsnapshot可以达到目的
–康斯坦丁·佩雷阿斯洛夫(Konstantin Pereiaslov)
2013年2月11日4:25
14.04 LTS完美无缺;另一个提示:当您准备卸载FTP站点时,只需使用umount DIR,其中DIR是您的/ path / to / ftp / folder。
–乔
15年8月4日在15:42
2017年,这仍然有效!老实说,最简单的方法是从FTP站点中复制文件。本地挂载,然后rsync好像是本地挂载
–td512
17年5月11日下午5:45
#5 楼
有一个weex ...Weex是一个实用工具,用于自动
远程执行维护网页或其他FTP存档的任务。
通过
根据需要执行上载和远程删除
,它将一组
本地文件同步到远程服务器。
评论
像魅力一样工作!您可以这样运行:$ weex yourFTPconfigName这是手册linuxcertif.com/man/1/weex
– sobi3ch
2015年1月30日14:48
#6 楼
rsync无法在ftp上运行。在远程端,它需要rsync守护程序或可以从中调用rsync的外壳。 Ftp通常允许您调用一些命令,而rsync不是其中之一。还有其他用于自动执行ftp任务的工具,例如“ lftp”。#7 楼
这似乎是一种很好的免费选择:https://savannah.gnu.org/projects/ftpsync/评论
鉴于近来蒸蒸日上的10英尺长SourceForge变得越来越多,也许您应该更新指向该项目网页的链接。
–HopelessN00b
16-2-22在0:32
#8 楼
对于您要尝试执行的操作,也可以使用wget。wget -m ftp:// username:password@domain.com
评论
那只会成为站点的一面镜子。您不能使用它来上传您的修改。
– David V.
2011年2月2日在10:06
#9 楼
您可以在http://linux.die.net/man/1/curlftpfs
之后使用curlftpfs挂载ftp并使用rsync。
评论
欢迎使用ServerFault!这可能是一个好的开始,但是关于为什么这是一个更好的方法的更多技术细节,也许是对如何做的模拟,可能是合理的。
–斯科特包
2012年12月9日在22:11
#10 楼
我正在使用GVFS / FTP。我用gigolo挂载了远程FTP服务器。
由于它们被视为本地目录,几乎所有处理本地文件的方法都有效。
rsync旨在计算文件哈希。远程比较文件而不传输文件,但是使用虚拟文件进行传输仍然可以传输文件。
unison和freefilesync通常可以正常工作,但是当他们想重命名上传的文件时却遇到了问题,下载没有问题。这可能是gvfs 1.6.1。的问题。
#11 楼
Jonas S的解决方案视情况而定,例如,如果您具有较高的下载速度和较慢的上载速度,则检查服务器上的文件可能比不必要地上载文件要快。您可能想要可以使用CurlFTPFS:
http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs
尽管如此,通常最好使用一个常规的FTP客户端,而不是rsync。
#12 楼
我不相信您能够做到这一点,您尝试Rsync的服务器将仅运行FTP服务器,它将无法理解Rsync发送它的命令。如果之所以要这样做,是因为您只能访问端口21,但是您可以控制服务器,可以更改服务器上Rsync侦听的端口,但这显然仅在您不想使用时才有用在该端口上使用FTP。
#13 楼
如果要自动化任务,请使用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/
它将为您完成剩下的工作。祝你好运
#14 楼
使用“ sitecopy”或“ mirror”可以节省大量带宽。它们都可以处理有效的增量更新。
评论
sitecopy:packages.debian.org/stretch/sitecopy/directory.fsf.org/wiki/Sitecopy
– myrdd
18-10-8在13:52
#15 楼
rclone是一款不错的软件,它可以通过ftp和许多其他协议(包括云存储提供程序(Amazon S3,Dropbox,Google Drive)进行目录同步)。它可以与本地或远程存储的任何组合进行同步。按照以下说明设置
ftp
远程。完成后,同步操作为:
rclone sync /home/dir FTP_REMOTE:/home --progress
#16 楼
还有wput:wput --timestamping --reupload --dont-continue source-files ftp://target.host/dir
用户名和密码是从〜/ .netrc中读取的。否则,如果您不特别关注安全性,则可以将它们提供为ftp:// username:password@target.host。
#17 楼
为此,我制作了自己的命令行工具: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'
评论
由于与其他人相同的原因,偶然发现了这个。通过FTP协议需要良好的同步实用程序。您的工具看起来不错,但是我无法使用它,因为我的要求是从远程下载并与本地同步。我想避免下载已经下载的文件。在本地,我对下载的文件进行处理,这使其与众不同。 FTP脚本下次运行时应跳过该命令。目前很难找到解决方案。
–anup
18年3月16日在13:11
是的,实际上是单向同步。
–superdario128
18 Mar 19 '18 at 22:48
#18 楼
安装sftp,然后可以使用rsync。我使用以下命令。
rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/
评论
那不是FTP,它可能使用SSH内部的sftp子系统(至少这是它在默认配置中所做的)
–马丁M.
09年6月12日在12:27
csync(sftp)和rsync可能是相同的工作方式
–拉贾特
09年6月12日在12:34
评论
这类似于询问如何在IRC上使用HTTP或在SMTP上使用FTP ...也许您可以解释一些想要这样做的理由,那么我们可以帮助您提出可行的解决方案。
本质上,我试图从共享的托管服务器自动执行备份,并且不了解rsync的工作方式。我现在已移至vps,并且不再受ftp的限制
重复是你的上帝:scie.nti.st/2013/4/13/…
如果是部署,那么您在想什么,而您不介意NodeJS,请检查dploy,lazy并与git
一起很好地工作