shell调用ftp(sftp)实现自动批量上传(下载)

原创
2014/05/08 11:33
阅读数 2.6W

    最近项目需要自动FTP批量上传文件或下载文件。最快的完成方式就是在shell里调用相关的命令,并用crontab调用shell脚本实现周期性FTP批理处理。

    当前流行的FTP分为 ftp vs sftp,关于这二者的的样例各举一个。

    注意:在编写shell脚本时需要特别注意脚本格式是windows or unix,因为换行符会引出一些莫名的错误。

1:ftp

    参考:http://blog.chinaunix.net/uid-20526681-id-3549245.html

  1. cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD)  

  2. ftp -niv <<- EOF  

  3. open IP_ADDRESS  

  4. user USERNAME PASSWORD  

  5. ascii(or bin)  

  6. put *(or get)  

  7. bye  

  8. EOF  

#!/bin/bash
#=====================================================
#功能:自动生成脱机文件上,并将文件上传银联FTP服务器
#
#作者:mengfh
#日期:2014-05-07
#=====================================================

#########初始配置数据#################################

#SFTP配置信息
#用户名
USER=xxxxx
#密码
PASSWORD=xxxxxx
#待上传文件根目录
SRCDIR=${HOME}/run/data
#银联FTP目录
DESDIR=test
#银联IP
IP=192.168.1.120 

#脱机消费文件成参数
#文件记录条数
LINE=1000
#文件生成清算日期(需要变更操作)
#DATE=20140507
DATE=`date +%Y%m%d`
#文件目录
DIR=${SRCDIR}/${DATE}

#######生成脱机文件##################################
#产生文件
offline ${DATE} ${LINE}

#######上传脱机文件##################################
#获取文件
cd ${DIR} ; 
FILES=`ls`

for FILE in ${FILES}
do
    echo ${FILE}

#发送文件(关键)   
ftp -niv <<- EOF  
open ${IP}  
user ${USER} ${PASSWORD}  
cd ${DESDIR}/
put ${FILE} 
bye  
EOF

done

2:sftp

    参考:http://seanliu.sa.blog.163.com/blog/static/102965911200910164850382/

#!/bin/bash
lftp -u user,password sftp://IP:Port <<EOF or lftp -e "put theFile; quit" -u username,password sftp://remotehost
cd direcory
lcd local directory
get file.gz
#put file.gz
by
EOF

#!/bin/bash
#=====================================================
#功能:自动生成脱机文件上,并将文件上传银联FTP服务器
#
#作者:mengfh
#日期:2014-05-07
#=====================================================

#########初始配置数据#################################

#SFTP配置信息
#用户名
USER=xxxx
#密码
PASSWORD=xxxxx
#待上传文件根目录
SRCDIR=${HOME}/run/data
#银联FTP目录
DESDIR=test
#银联IP
IP=192.168.1.120

#脱机消费文件成参数
#文件记录条数
LINE=1000
#文件生成清算日期(需要变更操作)
#DATE=20140507
DATE=`date +%Y%m%d`
#文件目录
DIR=${SRCDIR}/${DATE}

#######生成脱机文件##################################
#产生文件
offline ${DATE} ${LINE}

#######上传脱机文件##################################
#获取文件
cd ${DIR} ; 
FILES=`ls`

for FILE in ${FILES}
do
    echo ${FILE}
#发送文件 (关键部分)
lftp -u ${USER},${PASSWORD} sftp://${IP} <<EOF 
cd ${DESDIR}/
lcd ${DIR}
put ${FILE} 
by
EOF

done


参考

展开阅读全文
打赏
1
17 收藏
分享
加载中
更多评论
打赏
0 评论
17 收藏
1
分享
返回顶部
顶部