最近項目須要自動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
參考