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