利用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 //设置脚本循环时延
doneSFTP传输脚本与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
发表评论