Regex unix查找的文件名在字典上小于给定文件名

Regex unix查找的文件名在字典上小于给定文件名,regex,shell,unix,find,Regex,Shell,Unix,Find,我有一个目录中的文件列表,由系统自动生成,文件名中有日期。例如:audit\u 20111020,audit\u 20111021,audit\u 20111022,等等 我想清理超过18个月的文件,因此我想组合一个unix find命令,该命令将查找小于audit\u 20100501的文件并将其删除 有人知道如何在find命令中使用字典顺序作为标准吗?使用Perl很容易。键入perl和: for (glob "*") { my($n) = /(\d+)/; unlink if ($n

我有一个目录中的文件列表,由系统自动生成,文件名中有日期。例如:
audit\u 20111020
audit\u 20111021
audit\u 20111022
,等等

我想清理超过18个月的文件,因此我想组合一个unix find命令,该命令将查找小于
audit\u 20100501
的文件并将其删除


有人知道如何在find命令中使用字典顺序作为标准吗?

使用Perl很容易。键入
perl
和:

for (glob "*")
{
  my($n) = /(\d+)/;
  unlink if ($n < 20100501);
}
^D
for(glob“*”)
{
我的($n)=/(\d+)/;
取消if的链接($n<20100501);
}
^D
使用前测试。请注意,我假设这是一种固定格式,并且目录仅包含这些文件

另一个Perl变体:

perl -E'while(<audit_*>) { say if /(\d{8})/ && $1 < 20100501}'
perl-E'while(){say if/(\d{8})/&&$1<20100501}'
如果打印预期的文件名,则用
取消链接
替换
say


注意:
可以使用
排序
命令对
的结果进行排序:

find . -name "audit*" | sort -n
。。。然后找到拆分此列表的方法


但是,对于您想要执行的操作,即删除比某个日期早的目录(18个月是~547天),您可以使用以下方法:

find -ctime -547 -type d | xargs -I{} rm -rf {}
使用“审计”*更安全。