unix查找按字典顺序少于给定文件名的文件名

时间:2011-10-25 19:59:03

标签: regex shell unix find

我有一个目录中的文件列表,这些文件由系统自动生成,文件名中包含日期。一些示例包括:audit_20111020audit_20111021audit_20111022等。

我想清理超过18个月的文件,因此我想将unix find命令放在一起,找到小于audit_20100501的文件并删除它们。

有没有人知道如何使用词典顺序作为find命令的标准?

3 个答案:

答案 0 :(得分:2)

另一个Perl变体:

perl -E'while(<audit_*>) { say if /(\d{8})/ && $1 < 20100501}'

如果say打印出预期的文件名,请将unlink替换为<{1}}。

注意:<执行数字比较,如果您想要字符串比较,请使用lt

答案 1 :(得分:1)

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

for (glob "*")
{
  my($n) = /(\d+)/;
  unlink if ($n < 20100501);
}
^D

使用前测试。请注意,我假设这是一种固定格式,目录只包含这些文件

答案 2 :(得分:0)

可以使用find命令对sort的结果进行排序:

find . -name "audit*" | sort -n

...然后找到一种方法来拆分这个列表。

但是对于你想要做的事情,即删除早于特定日期的目录(18个月是~547天),你可以改用以下代码:

find -ctime -547 -type d | xargs -I{} rm -rf {}