查找Unix中字典序小于给定文件名的文件名。

3
我有一个文件目录列表,其中包含由系统自动生成的带日期文件名的文件。例如:audit_20111020audit_20111021audit_20111022等。
我想清理掉18个月之前的文件,因此我想编写一个unix查找命令,查找小于audit_20100501的文件并将其删除。
有人知道如何在find命令中使用字典序作为条件吗?
3个回答

2

另一种Perl变体:

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

如果打印出了预期的文件名,请用unlink替换say

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


1

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

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

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


但是,如果你想要做的是删除早于某个日期(18个月约为547天)的目录,你可以使用以下方法:

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

1
使用Perl很容易。输入perl,然后:
for (glob "*")
{
  my($n) = /(\d+)/;
  unlink if ($n < 20100501);
}
^D

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


最好使用“audit_*”来确保安全。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接