记录学习笔记、分享资源工具、交流技术思想、提升工作效率

在shell脚本中上传下载ftp上的文件

运维 xiaomudk 6年前 (2015-05-09) 1212次浏览 0个评论
文章目录[隐藏]

一. 使用ftp命令

#!/bin/sh

HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
REMOTE_DIR='test'
LOCAL_DIR='/tmp/ftp'
FILE='file.txt'
FILE1='file1.txt'

ftp -n <<END_SCRIPT                 #-n 不受.netrc文件的影响。(ftp默认为读取.netrc文件中的设定)
open $HOST                          
user $USER $PASSWD
binary                              #以二进制的方式传输文件
cd $REMOTE_DIR                      #远程Ftp目录
lcd $LOCAL_DIR                      #本机ftp目录
put $FILE                           #上传文件
get $FILE1                          #下载文件
quit                                #结束与服务器的FTP会话并退出FTP环境
END_SCRIPT
exit 0

但是使用ftp暂时碰到两个问题

二、使用wget

wget -m -nH -c --ftp-user=yourid --ftp-password=yourpass ftp://ftp.users.qwest.net:21/test

使用wget 可以下载整个目录,但是中文文件名会转成url编码(同样可以通过convmv来解决)

三、使用lftp命令

1.安装lftp

在centos上安装lftp:

# yum install lftp -y

2.使用lftp上传下载文件

lftp 默认就为binary模式,所以不用设置

#!/bin/sh

HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
REMOTE_DIR='test'
LOCAL_DIR='/tmp/ftp'
FILE='a_dir'
FILE1='b_dir'

lftp <<END_SCRIPT
open $HOST
user $USER $PASSWD
set ftp:charset "GBK"       #设置远程ftp的编码
set file:charset "UTF-8"    #设置本地服务器的编码,设置这两个编码是为了解决中文文件名乱码问题
cd $REMOTE_DIR
lcd LOCAL_DIR
mirror -v $FILE           #下载一个目录
mirror -R $FILE1           #上传一个目录
quit
END_SCRIPT

或者

lftp -u user,pass ftp.users.qwest.net:21 -e 'mirror -v new ; quit'    # 下载一个目录
lftp -u user,pass ftp.users.qwest.net:21 -e 'cd /new ; mirror -R scan_basic_info ; quit'    #上传一个目录

lftp完美的解决了上面说的两个问题,使用起来简单,功能强大(支持FTP、HTTP、FISH、SFTP、HTTPS和FTPS协议)。 而且更适合在脚本中使用,以后写脚本就使用lftp来代替ftp了。


发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址