Contents

删除早于X的文件

1. 概述

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

在本教程中,**我们将研究在 Linux 上按年龄删除文件的方法。**这些命令也可以在其他 POSIX shell 中工作。

2. 查找和删除文件

我们需要找到符合我们标准的文件才能应用删除操作。

为此,我们将使用find 命令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 谓词的文件执行此操作。这意味着命令行开关的简单拼写错误或意外顺序可能会导致意外损坏

例如,让我们看一下以下命令:

find . -delete -name file.txt

我们可能会假设这只会从当前工作目录中删除file.txt 。但是,由于首先出现-delete开关,因此忽略*-name *。这个错误将删除我们当前目录中的所有内容!

以下是我们应该遵循的一些一般规则,以提高使用find删除时的安全性:

  • 通过预览确保find命令是正确的,在没有*-delete*开关的情况下运行它
  • 始终检查*-delete选项是否位于find*参数的末尾
  • 除非绝对必要,否则切勿以 root 用户身份删除文件