最近写了个关于复制文件,删除文件的脚本,主要功能是通过将一个文件夹下面的文件按时间顺序定时拷入另一个文件夹中,文件形式如附件,文件时间跨越4小时
定时由crontab来执行,每分钟执行一次脚本。
代码如下:
#!/usr/bin/bash
myyear=`date +%Y`
mymonth=`date +%m`
myday=`date +%d`
myhour=`date +%H`
mymin=`date +%M`
scadafilename=`date '+sz_%Y%m%d_%H%M%S_SCADA.DT~'`
pasfilename=`date '+sz_%Y%m%d_%H%M%S_PAS.DT~'`
myfilepath="/aems/sz/eformatdata/"
targetfilepath="/aems/datastore/sz_data/eformat/"
function createfile()
{
prename="sz_20090523_"
suffixname1="_SCADA.DT~"
suffixname2="_PAS.DT~"
tmp1=`expr ${myhour} % 4`
tmp2=`expr ${tmp1} + 7`
if(test $tmp2 -ge 10)
then
filehour=$tmp2
else
filehour="0"${tmp2}
fi
fileprename=${prename}${filehour}${mymin}
r1=`ls ${myfilepath} | grep ${fileprename} | grep ${suffixname1}`
length1=`echo "${r1}" | awk '{print length($0)}'`
if (test "${r1}" != "")
then
if (test $length1 -eq 28)
then
`cp ${myfilepath}${r1} ${targetfilepath}${scadafilename}`
fi
fi
r2=`ls ${myfilepath} | grep ${fileprename} | grep ${suffixname2}`
length2=`echo "${r2}" | awk '{print length($0)}'`
if (test "${r2}" != "")
then
if(test $length2 -eq 26)
then
`cp ${myfilepath}${r2} ${targetfilepath}${pasfilename}`
fi
fi
}
createfile
function cleardata()
{
if (test $myhour -eq 0)
then
if (test $mymin -eq 0)
then
`find /aems/logs/dataService -name "*.*" -ctime +7 -exec rm -fr {} \`
`find /aems/logs/deviceService -name "*.*" -exec +7 -exex rm -fr {} \`
fi
fi
findpreonehour
delscadaname=${targetfilepath}"sz_"${preyear}${premonth}${preday}"_"${prehour}${premin}"00_SCADA.DT~"
delpasname=${targetfilepath}"sz_"${preyear}${premonth}${preday}"_"${prehour}${premin}"00_PAS.DT~"
if (test -e ${delscadaname})
then
`rm ${delscadaname}`
fi
if (test -e ${delpasname})
then
`rm ${delpasname}`
fi
}
function findpreonehour()
{
premin=$mymin
prehour=`expr ${myhour} - 1`
preday=$myday
premonth=$mymonth
preyear=$myyear
if (test $prehour -eq -1)
then
prehour=23
preday='expr ${myday} - 1`
fi
if (test $preday -eq 0)
then
premonth=`expr ${mymonth} - 1'
fi
if (test $premonth -eq 0)
then
premonth=12
preyear=`expr ${myyear} - 1`
fi
if (test $preday -eq 0)
then
case $premonth in
1|3|5|7|8|10|12) preday=31;;
4|6|9|11) preday=30;;
2) if (test `expr $preyear % 4` -eq 0)
then
preday=29
else
preday=28
fi
;;
esac
fi
phl=`echo ${prehour} | awk '{print length($0)}'`
if (test $phl -lt 2)
then
prehour="0"$prehour
fi
pdl=`echo ${preday} | awk '{print length($0)}'`
if (test $pdl -lt 2)
then
preday="0"$preday
fi
pml=`echo ${premonth} | awk '{print length($0)}'`
if (test $pml -lt 2)
then
premonth="0"$premonth
fi
}
cleardata

1598

被折叠的 条评论
为什么被折叠?



