我有一个目录中的文件列表,这些文件由系统自动生成,文件名中包含日期。一些示例包括:audit_20111020
,audit_20111021
,audit_20111022
等。
我想清理超过18个月的文件,因此我想将unix find命令放在一起,找到小于audit_20100501
的文件并删除它们。
有没有人知道如何使用词典顺序作为find命令的标准?
答案 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 {}