aix下的shell脚本。 同一类文件,只保留最近时间的一份,其余删除

现在系统会定时产生一类文件。以XM_序列号_时间(2013041610025746040).zip文件格式。
序列号一样的文件会很多,但产生的时间即上述的时间会不一样,现在我想只保留最近的一份文件,请问该如何撰写脚本。序列号非常多,脚本能够自动去对每一个序列号进行操作 只保留最近的一份,请大侠帮帮忙

测试过了有点小问题,已经修改!

dir=dir_name #注意修改这里的文件夹名
cd $dir
ls XM_*_*.zip > temp1
cut -d . -f 1 temp1 >temp2 #去后缀名
sort -t _ -k 2n -k 3nr temp2 >temp3 #先按序列号再按时间排序
sort -t _ -k 2n -u temp3 >temp4
#这行是重点,-u选项是删除后续序列号重复的行在前一步已经将文件按时间排序,所以这行执行后就是需要保留的文件名
#本来这一步就差不多了,考虑到系统会定时产生文件,所以要把需要删除的文件名弄出来
grep -F -v -f temp4 temp3 >temp5 #求文件差集,temp3-temp4
cat temp5 | awk '{print $1".zip"}' | xargs rm -f #可以删除了 大功告成(测试的时候先把这行注释掉,看下几个temp文件是否是符合要求的我没测试)
rm -f temp* #最后把temp文件删除(测试的时候也要注释)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-17
find $系统路径 -name "*.zip" -mtime +15 -exec rm -r {} \;