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