在Linux上删除超过一年的文件


18

到那时,我的系统上仍然有许多文件,而且我不再需要它们了,那么如何删除至少有一年历史的所有文件?

Answers:


34

你可以用这个命令

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

一些解释

/path/to/files* 是文件的路径。

-mtime用于指定文件存在的天数。+365将查找超过365天(即一年)的文件

-exec 允许您传递诸如rm之类的命令。


编辑感谢@Oli注意->您可以通过以下方式实现:

find /path/to/files* -mtime +365 -delete

7
您应始终引用{}in -exec(因此显示为-exec rm "{}" \;)。这样可以确保正确处理空格...并且您可以只使用-delete函数代替-exec
奥利

1
@Oli Huh ???(你所说的不可能是正确的,考虑到外壳轮流"{}"进入{}它传递给前find摆在首位,然后find替代它引用。{}建议的情况下,{}自己有时可以通过外壳经过特殊处理-这有什么可处理空格,通常{}不必用引号引起来,我想不到任何情况,至少在从Bourne样式的shell调用find的时候,当{}里面什么都没有,本身作为参数出现时, (必须引用。可以吗?)
Eliah Kagan 2014年

1
@EliahKagan是的,事实证明find可以自行转义,但是编写脚本时养成良好的习惯。没伤
奥利(Oli)

2
@Oli但是,即使在原则上也无济于事。如果find不处理转义,"{}"将仍然具有与-相同的效果,只是{}两者都不起作用,而不是两者都起作用。由于find的任何特殊功能,所以它们{}"{}"行为相同不是,也不能是。将Shell扩展的内容与其他程序扩展的内容混淆一个坏习惯。我们偶尔都会犯该错误,但这仍然是一个错误-并非最佳实践。(有人可能还会引用{}以帮助人们看到这不是括号扩展的模式,但这与单词拆分无关。)
Eliah Kagan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.