Linux 命令——删除早于 X 的文件

评论 0 浏览 0 2019-08-15

1.概述

我们经常需要整理工作站或服务器上的文件。我们的应用程序可能会产生日志或临时文件。一个常见的用例是删除超过一定期限的文件

在本教程中,我们将看看在Linux上按期限删除文件的方法。这些命令也可能在其他POSIX shells中起作用。

2.寻找和删除文件

我们将需要找到符合我们标准的文件,以便应用删除操作。

为此,我们将使用find命令。查找命令甚至提供了一个删除功能,我们可以使用。

2.1 删除早X分钟的文件

让我们先用find来删除文件名以access开头,以.log结尾,且超过15分钟的文件:

find . -name "access*.log" -type f -mmin +15 -delete

让我们仔细看看这条命令是如何构建的。

首先,我们已经指定了文件查询的起点,即当前工作目录“.”。

然后,我们的文件名标准前缀为-name开关。

开关-type f表示我们只想寻找文件。

-mmin代表修改时间,+15意味着我们要的是最后一次修改是在15分钟前或更早的文件。

操作标志-delete要求find删除它找到的所有文件。我们应该注意到,这将通过文件系统的层次结构递归查找,从当前工作目录开始。

2.2 删除超过X天的文件

只需对find命令做一个小的改动,就可以从几分钟切换到几天。

find . -name "access*.log" -type f -mtime +5 -delete

在这里,-mtime开关表示我们要删除至少在5天前修改过的文件。

2.3.用旧版本的find删除超过X天的文件

使用较早的发行版,find工具可能没有-delete开关

在这种情况下,有另一种方法。

find . -name "access*log" -exec rm {} \;

在这个版本中,-exec 开关允许我们在找到的每个文件上使用rm命令。

2.4.在提示下删除超过X天的文件

我们可能会担心,一个不正确的删除命令可能最终会删除错误的文件。上述命令的一个小变体将在删除前提示我们。

让我们把-i开关添加到rm命令中。

find . -name "access*log" -exec rm -i {} \;

这样,我们就可以决定哪些文件会被删除。

3.避免意外的文件删除

删除文件是相当容易的,但我们必须记住,我们是为所有符合查找前提条件的文件进行删除。这意味着一个简单的打字错误或命令行开关的意外顺序可能会造成意外的损害

作为一个例子,让我们看一下下面的命令。

find . -delete -name file.txt

我们可能会认为这将只删除当前工作目录中的file.txt。然而,由于-delete开关在先,-name被忽略了。这个错误将删除我们当前目录中的所有内容!

这里有一些我们应该遵循的一般规则,以提高使用find进行删除时的安全性。

  • 通过预览确保find命令是正确的,在没有-delete开关的情况下运行该命令。
  • 始终检查 -delete选项是否在find arguments的末尾
  • 除非绝对必要,否则不要以根用户身份删除文件。

4.总结

在本教程中,我们已经研究了如何删除超过某个时期的文件。

接下来,我们研究了如果给定的开关不按必要的顺序可能会出现什么问题。

最后,我们简单看了一下在系统上运行这类命令时应该遵循的一般规则。

find 命令非常方便,并且有很多额外的开关。 我们可以通过 man findfind –help 找到更多信息。

最后更新2022-11-16
0 个评论
标签