it-swarm.cn

如何通过FTP使用rsync

任何Unix:

我有下面的cmd行,效果很好。

rsync -avr -e ssh /home/dir [email protected]:/home/

但是我现在需要将其设置为rsync到只有FTP服务器的远程服务器。我该怎么办?

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

191
bumperbox

你不知道rsync无法为您做到这一点,它是它自己的协议,不能在FTP上运行。

但是,您可能想尝试 csync 。 IIRC通过HTTP提供类似rsync的行为。我无法评论它是否可以在FTP上运行,您必须尝试一下。

80
serverhorror

rsync对您不起作用,原因是其他人提到过。但是,lftpncftp都具有“镜像”模式,可能会满足您的需求。

我用它来将本地目录中的内容推送到ftp或sftp虚拟主机:

lftp -c "set ftp:list-options -a;
open ftp://user:[email protected]; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
163
easel

正如 easel 所写,lftp是一个很好的工具。

我建议您对脚本进行参数化,并利用

exclude-glob

选项,使用Shell的全局功能(* ,? ..)排除文件名:

#!/bin/bash    
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:[email protected]$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来启用它。

123
GabrieleV

根据您实际要执行的操作,另一种完全不同的方法可以使用curlftps来安装ftp文件夹,然后使用rsync来安装两个“本地”文件夹。

安装因发行版而异,因此我无法一概而论,但是您需要install Fusecurlftpfs(默认情况下,prolly 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:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

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

但是,请注意以下两点:

  • 开发人员在一两年前放弃了该项目,所以我暂时不知道其可用性/稳定性。
  • 如果密码中包含一个奇怪的字符curlftpfs可能会失败(也许您可以使用.netrc)。
25

weex ...

Weex是一种实用工具,旨在自动执行远程维护网页或其他FTP存档的任务。通过根据需要执行上载和远程删除,它将同步一组本地文件到远程服务器。

16
Johan

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

9
Ian Kelling

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

8
pauska

对于您要尝试执行的操作,也可以使用wget。

wget -m ftp://用户名:[email protected]

7
Aaron

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

5
shaftmx

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

4
Papou

根据情况,Jonas S的解决方案可能会很有用,例如,如果您具有较高的下载速度和较慢的上载速度,则检查服务器上的文件可能比不必要地上载文件要快。

不过,您可能想使用CurlFTPFS: http://packages.ubuntu.com/search?suite=default&section=all&Arch=any&searchon=names&keywords=curlftpfs

尽管通常最好还是使用常规的FTP客户端而不是rsync。

3
user25738

如果要自动化任务,请使用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/

它将为您完成剩下的工作..祝您好运

2
desdecode

我不相信您能够做到这一点,您尝试Rsync的服务器将仅运行FTP服务器,它将无法理解Rsync发送它的命令。

如果您要这样做的原因是您只能访问端口21,但可以控制服务器,则可以更改服务器上Rsync侦听的端口,但这显然仅在您没有访问权限时才有用想要在该端口上使用FTP。

2
Sam Cogan

rclone 是一款不错的软件,它可以通过ftp和许多其他协议(包括云存储提供程序(Amazon S3,Dropbox,Google Drive)进行目录同步)。它可以与本地或远程存储的任何组合同步。

要设置ftp遥控器,请遵循 这些说明

完成后,同步操作为:

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

使用“ sitecopy”或“ mirror”可以节省大量带宽。

它们都处理有效的增量更新。

1
Kan-Ru Chen

为此,我制作了自己的命令行工具: ftpsync

为什么?由于它既简单又优雅,因此其他工具需要很多依赖项,有时需要编译,有时不起作用(例如MacOs High Sierra上的lftp)。 Ftpsync是用纯Python编写的,不需要第三方库,并且体积很小,您可以将文件包含在项目中。

用法:cd到您的项目目录并键入:

ftpsync user:[email protected]/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'
0
superdario128

还有wput:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

用户名和密码是从〜/ .netrc中读取的。否则,如果您不特别关注安全性,则可以将它们提供为 ftp:// username:[email protected]

0
Ole Wolf