一:背景

    在一个路径下有很多的文件,并且随着时间的累积文件会越来越多,并且文件名都遵循一个基本的格式,里面包含了年月日等信息,例如:TSMTPP2735D20170517142005E981.txt.gz


二:实现

     我们通过一个脚本来将这些文件根据日期来分开存储,脚本如下:

#文件所在的路径

xdrBasePath='/data/test'

echo 'xdr文件根路径:'${xdrBasePath}

for file in ${xdrBasePath}/*.txt.gz;

do

        ##截取文件里面的日期信息

        #1,获取文件名.包含后缀

        filename=$(basename $file)

        echo '文件名:'${filename}

        #2,截取时间:TSMTPP2735D20170517142005E981.txt.gz

        timeyear=${filename:11:4}

        timemonth=${filename:15:2}

        timeday=${filename:17:2}

        #echo '解析出的到年的时间:'${timeyear}

        #echo '解析出的到月的时间:'${timemonth}

        #echo '解析出的到日的时间:'${timeday}

        

        yeardirpath=${xdrBasePath}/${timeyear}

        monthdirpath=${yeardirpath}/${timemonth}

        daydirpath=${monthdirpath}/${timeday}

        #echo $yeardirpath

        #echo $monthdirpath

        #echo $daydirpath

        #判断文件夹是否存在,不存在就创建

        if [ ! -e ${yeardirpath} -o ! -d ${yeardirpath} ]; then 

                mkdir ${yeardirpath} 

        fi

        if [ ! -e ${monthdirpath} -o ! -d ${monthdirpath} ]; then 

                mkdir ${monthdirpath} 

        fi

        if [ ! -e ${daydirpath} -o ! -d ${daydirpath} ]; then 

                mkdir ${daydirpath} 

        fi

        #将文件移动到改目录下

        mv -f ${xdrBasePath}/${filename} ${daydirpath}

        #echo '-------------------------'

done

这么一来,就会将文件“TSMTPP2735D20170517142005E981.txt.gz”移动到“/data/test/2017/05/17”路径下去。



if语句解释如下:

    与:-a,当指定多个条件时,默认为与关系

    或:-o

    非:!,这是个单目操作符


    文件是否存在: -e

    文件是否是目录: -d


三:添加到系统调度里面

1,查看crontab服务状态

service crond status

2,启动服务

/sbin/service crond start

3,重启服务

/sbin/service crond restart

4,关闭服务

/sbin/service crond stop

5,查看调度任务

crontab -l

6,编辑调度任务

crontab -e

7,删除所有调度任务

crontab -r

 注意:如果只是删除某一个调度任务,请使用“crontab -e”

8,查看调度日志

tail -f /var/log/cron


调度编辑举例:

1,执行调度编辑“crontab -e”

2,在打开的vi中添加调度任务信息,例如每我分钟执行一次上面的脚本

*/5  * * * *  /data/movetest.sh