如何使用find删除早于N天或更新的文件(以及其他示例)

本文介绍了如何删除早于N天的文件。还有其他示例,例如仅匹配使用某些扩展名的文件。用于此 find用于在目录中搜索文件的命令行工具。您可以使用以下命令从目录中删除所有超过N天(文件的数据修改时间更早)的文件和文件夹。

find /directory/path/ -mindepth 1 -mtime +N -delete

需要用完整的命令描述替换的内容:

  • find Unix命令行工具,用于搜索文件(其他)。
  • /directory/path/ 搜索(和删除)文件的目录路径。将旧文件和文件夹替换为要删除的目录的路径 N 日报
  • -mindepth 1 用于不应用低于指定级别的测试或操作。 -mindepth 1 表示该命令处理除命令行参数以外的所有文件。如果没有此命令,该命令还将尝试删除 /directory/path/ 如果匹配 find 标准。如果您也想匹配搜索路径,则可以使用本文中的所有命令跳过此步骤。如果只想搜索文件,则无需指定此选项。-type f 例如,对于常规文件),而不是文件夹
  • -mtime +N 使用了N天前数据(内容)最近更改的匹配文件。交换 N 带数字(整数)。使用此命令,更改时间 N 日期被删除。例如,如果文件是在23天前一天最后一次修改的, -mtime +1 将文件视为上次修改是在1天0小时0分钟0秒前,并且它们不匹配。 查看此说明 为什么会这样 find 手册页 这不是很好
  • -delete 删除匹配的文件和文件夹

重要的是要注意 -delete 并非全部可用,因为它是GNU扩展 find 实施。阅读本文后面的说明,以了解其他方法来删除在所有实现中都可以使用的文件。
是否想测试命令而不删除文件和文件夹?删掉 -delete 该命令列出了所有符合条件的文件,而不删除它们。

find /directory/path/ -mindepth 1 -mtime +N

让我们来看一个例子。要从〜/ Downloads文件夹中删除所有超过10天的文件和文件夹,您可以使用:

find ~/Downloads -mindepth 1 -mtime +10 -delete

若要删除所有早于N天(文件修改时间晚于N天)的文件和文件夹,请使用: -N 代替 +N

find /directory/path/ -mindepth 1 -mtime -N -delete

从〜/删除10天前更改内容的下载中的所有文件和文件夹的示例:

find ~/Downloads -mindepth 1 -mtime -10 -delete

179

我建议阅读一些重要的观察:

  1. 参数的顺序很重要!需要添加 -delete 匹配文件后。对于第一个参数,将从以下位置删除所有文件(和文件夹) /directory/path/,无论它是否与查询匹配。一律添加 -delete 命令结束。
  2. 并非所有版本 find 技术支持 -delete,这是GNU扩展。如果 find 不支持您的版本 -delete,您可以使用 -exec rm -rf {} +find 根据我的阅读,该版本不支持此功能。使用 -exec rm -rf {} + 删除早于N天且仅匹配文件的文件(保留空子目录):
  3. find /directory/path/ -mindepth 1 -type f -mtime +N -exec rm -rf {} +

    这允许一个 rm 包含匹配文件列表的命令。这也会导致包含空格的文件名被执行 rm 未拆分为shell的命令。也值得注意 rm-rf 如果在此处指定参数,则仅删除指定参数之后的文件 -type -f (仅匹配文件)。

  4. 在搜索版本中有效的方法 exec rm {} ;。但是,这比已经描述的其他两种解决方案要慢。这是因为将为每个要删除的文件创建一个外部进程。这就是为什么我最后离开此解决方案。使用此命令从目录中删除所有早于X天的文件和文件夹。
  5. find /directory/path/ -mindepth 1 -mtime +N -exec rm -rf {} ;

使用find根据修改时间删除文件或文件夹的其他示例

仅删除早于N天的常规文件,并保留空子目录。

find /directory/path/ -mindepth 1 -type f -mtime +N -delete

在这里使用 -type f 仅匹配常规文件。也可以使用 -type d 匹配文件夹,或 -type l 从目录及其所有子目录中删除仅匹配.extension超过N天的文件:

find /directory/path/ -type f -mtime +N -name '*.extension' -delete

您将被添加 -maxdepth 1 阻止命令通过子目录,仅删除第一级的文件和目录。

find /directory/path/ -mindepth 1 -maxdepth 1 -mtime +N -delete

也可以使用 -ctime +Nñ -mtime,仅根据上次修改内容的时间来匹配文件:

find /directory/path/ -mindepth 1 -ctime +N -delete

Bash历史记录:执行每个命令时如何显示时间戳

Sidebar