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

20 command-line

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

May*_*hux 38

你可以用这个命令

find /path/to/files* -mtime +365 -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

有些解释

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

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

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


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

find /path/to/files* -mtime +365 -delete
Run Code Online (Sandbox Code Playgroud)

  • 你应该总是在 `-exec` 中引用 `{}`(所以它读作 `-exec rm "{}" \;`)。这可以确保正确处理空格...并且您可以使用`-delete` 函数而不是`-exec`。 (8认同)
  • @Oli 但即使在原则上也无济于事。如果 `find` 不处理转义,`"{}"` 仍然具有与 `{}` 相同的效果——只是两者都不起作用,而不是两者都起作用。`{}` 和 `"{}"` 行为相同不是——也不可能是——由于 find 的任何特殊功能。将 shell 扩展的内容与其他程序扩展的内容混淆*是*一个坏习惯。我们偶尔都会犯这个错误,但这仍然是一个错误——不是最佳实践。(人们可能仍然引用 `{}` 来帮助人们看到它不是括号扩展的模式,但这与分词无关。) (3认同)
  • @Oli [**Huh???**](http://paste.ubuntu.com/8524066/)(你说的不可能是对的,考虑到 shell 把 `"{}"` 变成了 `{} ` 在首先将它传递给 `find` 之前;然后用 `find` 代替它。建议引用 `{}`,以防 `{` 和 `}` 本身有时可能被 shell 特殊对待——它有与空格无关。而且通常不需要引用 `{}`。我想不出任何情况,至少在从 Bourne 风格的 shell 中调用 find 时,当 `{}` 没有任何内容时在里面,本身作为一个参数出现,必须被引用。你能吗?) (2认同)
  • @EliahKagan 是的,事实证明 `find` 可以自行处理转义,但在编写脚本时使用它并不是一个坏习惯。它不痛。 (2认同)