删除超过3年的文件。

11

我需要删除目录中两年以上的任何文件。非常重要的是,我要保留最新的文件并删除旧的文件。

我搜索到了以下内容:

find /path/to/files* -mtime +365 -exec rm {} \;

我可以直接把这个数字乘上去吗?

find /path/to/files* -mtime +1095 -exec rm {} \;

有没有办法添加一个开关,在删除文件时将文件名打印到屏幕上?以确保它正在执行我期望的操作?

我也找到了这个:

find /rec -mtime +365 -print0 | xargs -0 rm -f

这两个之间有很大的区别吗? 有一个比另一个更好吗? 我所了解到的是xargs更快。 我能把mtime数值乘以2或3年吗?

最后,我能像现在这样将代码放入可以每天运行的cron工作中吗?

谢谢!


2
关闭投票者,这显然与编程有关。并非每个提到Linux的问题都适合在Serverfault上发布。 - Blorgbeard
抱歉我把这个发错地方了。 - Joshua Haws
1
你没有。关闭投票者有点过于热心了。你的问题现在已经重新开放了。 - Blorgbeard
3个回答

12

我能简单地把这个数字乘以吗?

find /path/to/files -mtime +1095 -exec rm {} \;
是的。在删除之前要“echo”回来。
find /path/to/files -mtime +1095 -print

当你准备好时,可以使用-exec rm {} \;版本来删除文件。


我如何在删除文件后打印以了解哪些文件已成功删除? - Dora
1
rm 更改为 rm -v - Elliott Frisch

2
find /path/to/files* -mtime +1095 -exec rm {} \;

这应该可以正常工作,你可以通过简单地列出命令找到的文件来运行此操作的干燥运行:

find /path/to/files* -mtime +1095 -exec ls {} \;

为了保险起见,我建议您加上一个-type参数以确保不会删除其他内容:
find /path/to/files* -type f -mtime +1095 -exec rm {} \;

2
回答您问题的第二部分。
使用-exec或xargs有很大的区别。 -exec为每个找到的文件启动一个新的rm进程。这会创建大量开销,如果您删除大量文件,可能会严重减慢系统速度。
xargs仅创建所需数量的rm进程,因为它创建包含尽可能多文件的命令行。因此只创建了少量rm进程。
但两者都比-delete更好,因为delete是不安全的。

1
请问您能解释一下为什么“删除”操作是不安全的吗? - user944849

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