求教awk从文件名抓出日期

现在有一系列文件 文件名如下
  1. 2011_05_22_db.tar.gz
  2. 2011_05_23_db.tar.gz
  3. 2011_05_24_db.tar.gz
  4. 2011_05_25_db.tar.gz
  5. 2011_05_26_db.tar.gz
  6. 2011_05_27_db.tar.gz
  7. .........
复制代码
这是些数据库的备份文件  我现在想通过awk抓出这种格式内的日期
然后只保留7天的数据库备份...
ps:只由文件名内包含的信息来确定日期

求教各位高手

作者: chiyiangel   发布时间: 2011-05-30

用find吧,张麻子脸上不一定有麻子

作者: waker   发布时间: 2011-05-30

回复 waker


    我想用的是awk抓出日期 然后只保留7天内的备份文件 删除其他的... 请问这个脚本该如何写

作者: chiyiangel   发布时间: 2011-05-30

  1. ls -l | cut -d . -f 1 | tail -7
复制代码

作者: liion631818   发布时间: 2011-05-30

老大叫你用find . -mtime +7 -name "*db.tar.gz"找出这些超过7天的压缩包,然后删除就行了。何必非要去提取时间戳。

作者: zooyo   发布时间: 2011-05-30

回复 liion631818

非常感谢这位大哥  但是现在有个问题 我目录下不光有这些数据备份文件 还有些其他的文件

作者: chiyiangel   发布时间: 2011-05-30

回复 zooyo
非常感谢 但是因为里面有些文件的mtime 和 文件名上标注的日期不一定一样  所以肯定要用awk 自己从文件名中提取时间戳

作者: chiyiangel   发布时间: 2011-05-30

回复 chiyiangel


   给你的脚本只能获取最后7天的文件,不能删除啊,貌似不能满足你的要求,你还是看看上面大牛们给你的回复吧
  1. ls -1 2011* | cut -d . -f 1 | tail -7
复制代码

作者: liion631818   发布时间: 2011-05-30

本帖最后由 yinyuemi 于 2011-05-30 09:49 编辑

回复 chiyiangel


    awk(已测试)
  1. $ awk 'BEGIN{"date +%Y%m%d -d \"7 days ago\""|getline f_d; while (("ls *.gz"|getline f_name)>0) {f=gensub(/(....)_(..)_(..).*/,"\\1\\2\\3",1,f_name);if(f<f_d) {system("rm " f_name)}}}'
复制代码

作者: yinyuemi   发布时间: 2011-05-30

回复 chiyiangel


   你先把你那一系列文件怎样获取,或者有什么规则列出来,不然怎样知道哪些文件是你需要的,哪些是需要删除的

作者: liion631818   发布时间: 2011-05-30