我正在学习shell命令,所以这可能是一个微不足道的问题。我有一些文件,文件模式是date-text1-text2.xml.gz
示例 -
20140201-sometext1-sometext2.xml.gz
我想删除那些与其名称相关的日期的文件,并且该日期超过特定值。
截至目前,我所知道的是,我可以找到并删除某些模式的文件,例如
find . -name "2014022*-sometext1-sometext2-*.xml.gz | xargs rm
这将从20140220到20140228查找和删除文件。我怎样才能编写模式,以便找到并删除从20140220开始到今天的所有文件。这会涉及更高级的脚本还是可以轻松完成?
答案 0 :(得分:2)
请注意,使用前导零(即1月份为01)打印的日期会形成单调的数字序列。一种简单的方法是在awk中进行过滤。
find . -type f -iname "20*" | awk -vFROM=20140110 '{ if (0+substr($1,3) >= FROM) print $1;}'
您找到与您的模式匹配的所有文件,通过-v选项将您想要保留的最小数字设置为gawk并简单地比较数字。您可以在awk one-liner中实现任意过滤逻辑。 ' ./'的substr()印章;部分找到打印的比较。 0+疯狂是为了确保awk确实比较数字而不是字符串。丑陋,但有时是必要的。