shell基础练习<三>

现已知,公司内有一个目录,存放着上百万张居民身份证照片,照片的命名以居民的身份证号加后缀格式如(150422198207055113.jpg),由于数百万张照片全部存在同一个目录,且此目录会不断增长(因为前台用户每一次查询都会把查出来的居民照片存放在这个目录下),因此程序在调用此目录下一个文件时会变的非常慢(经查应该是目录下文件过多,导致系统在查询一个文件需要很长时间),因此决定将此目录下的文件按照一定的格式存放在不同的目录中,格式如下:

18位身份证:
370   722  1978  1222  2517.jpg
省      市   生年  生日  其它
15位身份证:
130  133  83   1013   213.jpg
省     市   生年  生日  其它

现要求管理员制作一个脚本,把当前目录下的文件按照以上格式分别创建目录并把照片(注意是copy走,不是移走)存放到相应的目录下,脚本执行完毕后的目录结构应该如下:

18位身份证:
370/722/1978/1222/370722197812222517.jpg
15位身份证:
130/133/83/1013/130133831013213.jpg

由于此目录下会不断产生新的文件,所以此脚本需每10分钟执行一次,一旦发现有新的文件产生就立即将其按相应的格式copy到相应目录中。


脚本如下:

#!/bin/bash
time=`date +%Y%m%d%H%M`
[ -d /tmp/dir15 ] || mkdir /tmp/dir15
[ -d /tmp/dir18 ] || mkdir /tmp/dir18

for time in `date +%Y%m%d%H%M -d "10 minutes ago" `
do
    find  /data/jpeg/*.jpg -type f  -mmin -10 |awk -F'/' '{print $NF}'|grep '[0-9]\{15\}.jpg'  > /tmp/dir15/$time
    find  /data/jpeg/*.jpg -type f  -mmin -10 |awk -F'/' '{print $NF}'|grep '[0-9]\{18\}.jpg'  > /tmp/dir18/$time
    cat /tmp/dir15/$time | while read line15
    do
        dir1=`echo $line15 | cut -b1-3`
        dir2=`echo $line15 | cut -b4-6`
        dir3=`echo $line15 | cut -b7-8`
        dir4=`echo $line15 | cut -b9-12`
        mkdir /data/jpeg/${dir1}/${dir2}/${dir3}/${dir4} -p
        cp /data/jpeg/${line15}  /data/jpeg/${dir1}/${dir2}/${dir3}/${dir4}
    done

    cat /tmp/dir18/$time | while read line18
    do
        dir11=`echo $line18 | cut -b1-3`
        dir22=`echo $line18 | cut -b4-6`
        dir33=`echo $line18 | cut -b7-10`
        dir44=`echo $line18 | cut -b11-14`
        mkdir /data/jpeg/${dir11}/${dir22}/${dir33}/${dir44} -p
        cp /data/jpeg/${line18}  /data/jpeg/${dir11}/${dir22}/${dir33}/${dir44}
    done
done

然后写计划任务,每10分钟执行一次。

你可能感兴趣的:(优化,shell,脚本,职场,休闲)