利用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


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。