如何在rsync中通过FTP复制所有文件

时间:2011-05-13 03:21:55

标签: linux ftp rsync

我有一些主机的在线帐户,它为我提供了用户名和密码的FTP帐户。

我有另一个与copany给了我FTP和rsync。

现在我想通过rync将我的所有文件从旧FTP传输到新FTP。

现在可以通过rsync来实现,因为我不想先在计算机上复制然后再上传

3 个答案:

答案 0 :(得分:14)

让我们只使用FTP src调用本机。

让我们用FTP和SSH dst调用机器。

ssh dst
cd destination-direction
wget --mirror --ftp-user=username --ftp-password=password\
     --no-host-directories ftp://src/pathname/

请注意,在命令行中使用wget运行--ftp-password会将密码泄露给系统上的任何其他人。 (以及明确地通过电线传输它,但你知道。)

如果您无法访问wget,则可能已安装ncftplftpftp。我碰巧知道wget最好的。 :)

修改要使用ftp,您需要执行以下操作:

ftp src
user username
pass password
bin
cd /pathname
ls

此时,请记下远程系统上的所有目录。使用!mkdir创建每个。然后在本地和远程更改目录:

lcd <dirname>
cd <dirname>
ls

重复所有目录。使用mget *获取所有文件。

如果这看起来很糟糕,那是因为它。 FTP不是为此设计的,如果您的新主机没有更好的工具(请务必查找ncftplftp,可能还有ftpmirror),那么要么编译自己更好的工具或者善于围绕坏工具编写脚本。 :)

或者,如果你可以在src上获得一个shell,那也非常有帮助。 FTP不仅仅用于传输数千个文件。

无论如何,这可以避免在本地系统中弹跳,这应该有助于显着提高吞吐量。

答案 1 :(得分:4)

总是有值得信赖的FUSE文件系统,CurlFtpFSSSHFS。使用适当的文件系统挂载每个服务器并使用标准实用程序进行复制。可能不是最快的方式,但可能是劳动密集程度最低的。

答案 2 :(得分:1)

我一直在寻找一种简单的解决方案,通过FTP将远程文件夹同步到本地文件夹,同时只替换新文件。我遇到了一些基于sarnold answer wget 脚本,我认为这些脚本对其他人也有帮助,所以在这里是:

#!/bin/bash    
HOST="1.2.3.4"
USER="username"
PASS="password"
LDIR="/path/to/local/dir"    # can be empty
RDIR="/path/to/remote/dir"   # can be empty

cd $LDIR && \                # only start if the cd was successful
wget \
  --continue \               # resume on files that have already been partially transmitted
  --mirror \                 # --recursive --level=inf --timestamping --no-remove-listing
  --no-host-directories \    # don't create 'ftp://src/' folder structure for synced files
  --ftp-user=$USER \
  --ftp-password=$PASS \
    ftp://$HOST/$RDIR