记一道简单的面试题

直接上题:

#!/bin/sh
#有一个监控程序,会自动生成每一分钟的监控,并切割放入文件夹中,
#比如2016-05-17 17:16:00 的视频文件文件名为201605171715.mp4,
#现在要求写一个脚本,找出缺失的视频文件,语言不限,脚本运行方式如:
#videocheck -s 2016-05-15 17:15:00 -e 2016-05-16 03:46:00
#-s为查询的起始时间,-e为查询的截止时间
#btw:如果有文件在后来被篡改,请找出被篡改的文件。

DR_VIDEO=/data/video

START_TIME="$2"  
END_TIME="$4"

START_TIME_unix=`date -d "$START_TIME" +%s`  
END_TIME_unix=`date -d "$END_TIME" +%s`

ROLL=$START_TIME_unix  
while(( $ROLL <= $END_TIME_unix ))  
do  
    FILE_NAME=`date -d @"$ROLL" "+%Y%m%d%H%M"`.mp4

    if [ -f "$DR_VIDEO/$FILE_NAME" ];then
        TIME_MODIFY_normal=`stat $FILE_NAME | grep -i Modify | awk '{print $2,$3}' | cut -d'.' -f1 | sed "s/[0-9][0-9]$/00/"`
        TIME_MODIFY_unix=`date -d "$TIME_MODIFY_normal" +%s`
        TIME_MODIFY_unix_p1=`expr $TIME_MODIFY_unix - 60`
        if [ $ROLL != $TIME_MODIFY_unix_p1 ];then
            echo "$FILE_NAME have been modify"
        fi
    else
        echo "$FILE_NAME lost"
    fi
    ROLL=`expr $ROLL + 60`
done  

其实思路很简单,就是在指定的范围内判断文件存不存在一集根据文件名和文件的modify属性作对比,写一个循环就可以搞定,注意unix时间戳的对比。输入参数的判断暂时不考虑。本人不才,shell写的很烂,将就看吧。

面试的时候脑抽了,洋洋洒洒写了上百行,有4个循环,还写文件列表读文件列表,开销比上边的大了至少10倍。因为对文件列表没有及时处理,造成了多余的问题,调试半天都没注意到,而且电脑与测试机的联通有问题,延迟很高,以至于越弄越乱,竟然耗费差不多2小时,而且都还没能完全跑起来,可想而知面试官对我的鄙夷有多深。

生无可恋了,后悔药吃起来吧,这个脚本写完+调试超过30分钟就是能力有问题了,继续努力吧。

最近的文章

记一次Gitlab升级过程

现在公司使用gitlab作为版本管理工具,由于安装时间早,停留在了6.3.1 bitnami版本,ssh协议貌似是废的,只能走http。虽然说日常拉取和提交代码都没什么问题,但是近期出现了不稳定的现象…

gitlab, ruby, python, db继续阅读