LINUX shell 如何获取当前时间之前24小时的所有文件,文件都是以时间命名的!

比如我的文件是20110307100000,此时获取10点之前24小时之内的文件,

24小时,就是相差一天,所以变化的只有天数。
我这里提供一个笨方法:
用date获取当前日期和时间,格式化成你的文件命名格式,用下面的字符串截取方法获得天数:
${varible:n1:n2}:截取变量varible从n1到n2之间的字符串
天数减1后,重新组织成新的字符串。
用循环比较 ls 出来的文件名与这个字符串。
代码试过后再放上来。追问

大侠,可否把代码贴出来参考下呢,谢谢

追答

#获取当前日期时间的前一天并格式化为"年月日时分秒"格式
myTime=`date -d '1 day ago' "+%Y%m%d%k%M%S"`
#将 ls 的结果与之比较,输出大于等于该时间的所有文件名
ls | while read line
do
#使用的是整数表达式,这就要求你文件夹下的所有文件都以这种数字格式命名
[ "$line" -ge $myTime ] && echo “$line”
done

注意:如果你的shell不支持date的-d选项,那么只有用我上面说的字符串截取方法了。

追问

我的文件名是这样的:asb_201103071317.jpg这样命名的,用你这种方法输出来的话,/root/test/video_old_24.sh: line 15: [: 02.jpg: integer expression expected会提示这个,怎么解决呢?太感谢您了,

追答

那就先把文件名的日期部分取出来,再比较啊。
myTime=`date -d '1 day ago' "+%Y%m%d%k%M%S"`
ls | while read line
do
filedate=`awk 'BEGIN{FS="[_.]"}{print $2}'`
[ "$filedate" -ge $myTime ] && echo “$line”
done

追问

嗯这个我解决了,我还想知道,那个$line 变量如何获取到while循环的外面??

追答

用数组变量保存。
i=0
ls | while read line
do
filedate=`awk 'BEGIN{FS="[_.]"}{print $2}'`
[ "$filedate" -ge $myTime ] && filename[$i]=“$line”
i=`expr $i + 1`
done

while循环外面用的时候,用 ${filename[$i]} 来引用相应的数组变量值即可。

追问

您方便留个联系方式吗??

追答

百度hi客户端加xiehuahere,其他联系方式诸如手机、邮箱等就不方便在这里留啦~~见谅 ;-)

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答