如何仅使用ftp或lftp将目录递归上传到FTP服务器?


19

我正在编写一个Linux Shell脚本,以将本地目录复制到远程服务器(删除所有现有文件)。

本地服务器: ftplftp命令可用,没有 ncftp没有任何图形工具。

远程服务器:只能通过FTP访问。没有rsync或SSH或FXP。

我正在考虑列出本地和远程文件以生成lftp脚本,然后运行它。有没有更好的办法?

注意:仅上传修改过的文件是一个加号,但不是必需的。


ncftp是完全没有问题的吗?最简单的恕我直言。(而且我知道它会像我那样使用)
Sirex

Sirex:我宁愿使用RedHat上默认提供的工具来做到这一点。如果lftp证明无法使用,我将要求用户安装ncftp。
Nicolas Raoul

wput(类似于wget的ftp-uploader)的语法:wput dir/ ftp://user:pass@host/dir
kenorb 2015年

Answers:


39

lftp应该能够一步一步做到这一点,尤其是在lftp mirror

编辑:lftp命令语法令人困惑,我发布的原始调用不起作用。像这样尝试:

lftp -e“ mirror -R {本地目录} {远程目录}” -u {用户名},{密码} {主机}

注意-e开关参数周围的引号。


1
+1提示我即使FXP不可用,lftp的镜像模式也可以工作(在阅读了tutorials.papamike.ca/pub/lftp.html后,我坚信相反的说法,其中说“两个服务器都必须支持此协议,此操作才能成功”)。但是,此特定命令在我的Ubuntu服务器上失败:lftp:mirror:名称或服务未知,未知命令-R。
Nicolas Raoul

我用更好的lftp调用重述了我的答案,希望能有所帮助。
Phil Hollenback

我终于让它工作了!看来您必须将其切换为远程和本地。请更新,我将接受此答案。这是一个有效的命令行:lftp -e“ mirror -R / tmp / mylocalfiles / var / www” -u remoteuser,remotepassword remoteserver
Nicolas Raoul

我想我在lftp文档中看到使用-R时必须切换本地和远程目录,但我一定忘了。更新了我的答案。
Phil Hollenback

它怎么会失败?您是否尝试过运行“ lftp -vvv”以获得更详细的输出以确定它要做什么?
Phil Hollenback

1

基于Phil的使用lftp镜像模式的想法,此命令可完成以下操作:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

缺点是需要本地服务器运行FTP服务器。


1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

这对我有用,其他许多尝试都失败了。一旦进入lftp,即可通过以下方式获得更多信息:

help mput

2
最好在mirror -R这里使用。

@gauteh你是对的。最佳答案^
奥斯汀

0

终于得到了答案!!!创建外壳脚本ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • 路径=我们要复制到ftp服务器的本地目录
  • 用户名= ftp服务器用户名
  • 密码= ftp服务器密码
  • ftp-server-ip = ftp服务器的IP地址

如果未安装lftp软件包,则使用yum进行安装。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.