我找到了删除文件夹中超过 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