Answers:
我喜欢用tmpwatch
这些东西,这是文件的最后修改。它很简单,并且在许多情况下都可以很好地工作:
tmpwatch -m 720 /path/to/cache
对于Ubuntu,请检查tmpreaper
。
如果要检查上次访问文件的时间,请使用以下命令:
tmpwatch -a 720 /path/to/cache
您不能在使用noatime挂载的文件系统上使用tmpwatch -a。您仍然可以使用-m
Ubuntu 10.04.2 LTS
和该命令不存在..
tmpreaper
代替。
正如chiborg所说,负载是由于找到的每个文件启动rm引起的。我注意到在哪里tmpwatch
建议将答案作为替代方法,我确信它可以很好地工作。但是,这不是必需的。
如果您告诉Find将查找到的文件累积到如下所示的参数列表中,则可以运行一次给exec的命令:
find /path -name "*.moo" -exec rm {} \+
有时这可能无法正常工作,因为参数列表的增长(以字节为单位)可能大于外壳程序所允许的最大值(getconf ARG_MAX)。这可以通过带有-L选项的xargs解决。
考虑以下示例:
$ echo 0 > /tmp/it;
$ for i in {0..15000};do echo $i;done |\
xargs --no-run-if-empty -L 5000 ./tmp/xr.sh
Iteration=0; running with 5000 arguments
Iteration=1; running with 5000 arguments
Iteration=2; running with 5000 arguments
Iteration=3; running with 1 arguments
$ cat tmp/xr.sh
#!/bin/sh
IT=`cat /tmp/it`
echo Iteration=$IT\; running with $# arguments
let IT=IT+1
echo $IT > /tmp/it
因此,无需安装额外的软件,您所需要的只是在gnu-findutils中:
find /path -mtime +30 -print0 | xargs -0 -L 5000 rm
\+
;普通+
就足够了。(2)这不会“因为参数列表可能会变大而无法工作……”。 find … -exec … {} +
将做与将要做的相同的事情xargs
;它会根据需要多次运行命令。例如(如您的示例),如果您的文件在15001至20000之间,find
则将运行-exec
'd程序(rm
)四次。
cache*
扩展到许多文件,则可能需要尝试类似的操作find . -name 'cache*' -mtime +30 -exec rm {} \;
。