删除 X 天以上之前的文件

删除 X 天以上之前的文件

我找到了删除文件夹中超过 5 天的文件的命令

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

但是我该如何对该文件夹中的子目录执行此操作呢?

答案1

通过管道传输到 rm 时要小心特殊文件名(空格、引号)。

有一个安全的替代方案——-删除选项:

find /path/to/directory/ -mindepth 1 -mtime +5 -delete

就是这样,不需要单独的 rm 调用,并且您无需担心文件名。

在运行命令之前替换-delete为以测试该命令(暗示)。-depth -print-delete-depth

解释:

  • -mindepth 1:如果没有这个,.(目录本身)也可能匹配并因此被删除。
  • -mtime +5:处理最后一次修改数据是在5*24小时前的文件。

答案2

请注意,当发现太多文件时,此命令将不起作用。它会产生如下错误:

bash: /usr/bin/find: Argument list too long

这意味着超出了 exec 系统调用对命令行长度的限制。与以这种方式执行 rm 相比,使用效率更高参数。这是一个有效的示例:

find /root/Maildir/ -mindepth 1 -type f -mtime +14 | xargs rm

这将删除 /root/Maildir/ 下超过 14 天前修改的所有文件(类型 f),并从那里递归地更深(最小深度 1)。有关更多选项,请参阅查找手册

答案3

一样的。您只需提供父目录而不是文件前缀。在你的例子中,它将是:

find /path/to -type f -mtime +5 -exec rm {} \;

/path/to这将删除及其子目录下所有超过 5 天的文件。

要删除空子目录,请参阅上面的@Costas 注释。

答案4

find . -mtime +3 -type f -not -name '*pid*' |xargs rm -rf

相关内容