最近项目须要自动FTP批量上传文件或下载文件。最快的完成方式就是在shell里调用相关的命令,并用crontab调用shell脚本实现周期性FTP批理处理。
html
当前流行的FTP分为 ftp vs sftp,关于这两者的的样例各举一个。shell
注意:在编写shell脚本时须要特别注意脚本格式是windows or unix,由于换行符会引出一些莫名的错误。
windows
1:ftp
bash
参考:http://blog.chinaunix.net/uid-20526681-id-3549245.html服务器
cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD) ui
ftp -niv <<- EOF spa
open IP_ADDRESS .net
user USERNAME PASSWORD unix
ascii(or bin) code
put *(or get)
bye
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
参考