最近写了个关于复制文件,删除文件的脚本,主要功能是通过将一个文件夹下面的文件按时间顺序定时拷入另一个文件夹中,文件形式如附件,文件时间跨越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