利用shell脚本实现FTP传输、SCP传输、SFTP传输。
编写传输脚本之前,需要总结文件格式规律,以下为FTP主动上报脚本,每日需要上传一份总结性文件,直接加在定时任务即可,文件格式基本没变化,变化的是时间。
FTP传输脚本:
#!/bin/bash TIME=`date +%Y%m%d` QTIME=`date +%Y%m%d -d -1day` RTM=`date +%Y%m%d -d -3day` FTPS= USER= PASS= FILE=/tmp/ipv6/ # cd ${FILE} expect << EOF spawn ftp $FTPS expect ":root): " { send "${USER}\r" } expect "Password:" { send "${PASS}\r" } expect "ftp> " { send "cd ipv6\r" } expect "ftp> " { send "put FILE_${QTIME}.csv\r" } sleep 30 expect "ftp> " { send "exit\r" } EOF rm -rf /tmp/ipv6/FILE_${RTM}*csv
以下案例中,需要将本机/dev/shm/FILE中的话单传输给192.168.1.11:/home/FILE
此脚本能够实现实时传输,直接放入后台运行即可。
SCP传输脚本:
#!/bin/bash mkdir /dev/shm/lingshi //临时处理目录,用作压缩文件;在/dev/shm下是为了延长磁盘使用寿命加快处理速度 while true do for i in $(ls /dev/shm/FILE/*.txt) do count=$(grep "$i" /dev/shm/log/log.txt|wc -l) //比对此文件是否有被传输过 if [ $count -eq 0 ];then cp $i /dev/shm/FILE/${i##*/}.tmp mv /dev/shm/FILE/${i##*/}.tmp /dev/shm/lingshi/${i##*/} mgzip -2 -t 4 /dev/shm/lingshi/${i##*/} chmod 777 /dev/shm/lingshi/${i##*/}.gz scp /dev/shm/lingshi/${i##*/}.gz 192.168.1.11:/home/FILE/ rm /dev/shm/lingshi/${i##*/}.gz echo $i >> /dev/shm/log/log.txt fi done sleep 1 //设置脚本循环时延 done
SFTP传输脚本与FTP传输脚本类似,需要注意的是这个脚本相比上面的脚本是实时传输并放置在后台运行的,所以每次重新读取变量的时候针对不固定变量需要写在while里面,while外面的变量只会在首次运行时读取,在之后的死循环里将不会发生变化。
SFTP传输脚本:
#!/bin/bash FTPSVR= USER= PASS= # HD=rtp FILE=/home/surfing-rtp/ while true do for i in $(find ${FILE}${HD} |grep txt) do count=$(grep "$i" /home/shell/volte_${HD}_file.log|wc -l) if [ $count -eq 0 ];then YMD=`date +%Y%m%d` FTPFL=/data2/data/54/${HD}/${YMD}/ cd ${FILE}`echo ${i} | awk -F\/ '{print $4}'` expect << EOF spawn sftp $USER@$FTPSVR expect "ssword:" { send "${PASS}\r" } expect "ftp> " { send "mkdir ${FTPFL}\r" } expect "ftp> " { send "cd ${FTPFL}\r" } expect "ftp> " { send "put `echo ${i} | awk -F\/ '{print $5}'`\r" } expect "ftp> " { send "exit\r" } EOF mv $i /home/surfing-rtp/ok/ echo $i >> /home/shell/volte_${HD}_file.log fi done sleep 1 done
发表评论