ftp同步数据到服务器

现在有同步数据到服务器的需求。按道理来讲,一般是通过sftp来做最为合适,比如:

scp -r /local/path user@host_name:/remote/path

在这里添加好ssh免密码或者使用sshpass即可。

但是客户回答说只能用ftp, 不能使用sftp。因为ssh登录密码将来会收回去。。。

这下就比较麻烦了,在网上搜了一下,此类问题早就有人解决过了:

#!/bin/bash 
updir=/root/tmp
todir=tmp
ip=127.0.0.1
user=username
password=passwd
sss=`find $updir -type d -printf $todir/'%P\n'| awk '{if ($0 == "")next;print "mkdir " $0}'` 
aaa=`find $updir -type f -printf 'put %p %P \n'` 
ftp -nv $ip <<EOF 
user $user $password
type binary 
prompt 
$sss 
cd $todir 
$aaa 
quit 
EOF

解决方法就是用find找出所有的目录,然后在ftp命令行里执行对应的创建。完成后继续用find命令找到文件放到远端创建好的文件夹里。

这个方法我用了一下,的确可用。但是我仍感觉命令稍显繁琐,而且每次执行都会覆盖原有的文件,或许有命令能检查重复文件来跳过,但是研究起来比较花时间。直到我发现机器上已安装了lftp工具,在ftp SHELL里直接一行搞定:

lftp $username:$password@$host
#此时进入ftp shell
mirror -R /local/path /remote/path

就能自动同步本地文件到远程主机。

如果要编写脚本来自动执行,可以照着上面的套路这么写:

lftp <<EOF
open $username:$password@$host
mirror -R /local/path /remote/path
quit
EOF

其实lftp本身有个-c的选项来读入命令:

lftp -c "open $username:$password@$host && mirror -R /local/path /remote/path"

结束后会自动退出。

另外也可以通过管道来执行:

echo "open $username:$password@$host && mirror -R /local/path /remote/path" | lftp

lftp使用上远比ftp命令好用,很多linux发行版默认安装的,除了debian。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 100,117评论 9 468
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 10,761评论 0 11
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,354评论 2 33
  • 论和璠老妈妈吃了一晚上后所进行的思考,和老妈妈说了8.15的事情,回来后我就开始分析了一下目前状况。我也发现,我一...
    周圆圆圆圆圆阅读 1,778评论 1 1

友情链接更多精彩内容