在 bash 中查找超过 X 天的文件并删除

Posted

技术标签:

【中文标题】在 bash 中查找超过 X 天的文件并删除【英文标题】:find files older than X days in bash and delete 【发布时间】:2013-12-12 20:12:21 【问题描述】:

我有一个包含几 TB 文件的目录。我想删除其中所有超过 14 天的文件。

我想我会使用find . -mtime +13 -delete。为了确保命令按预期工作,我运行了find . -mtime +13 -exec /bin/ls -lh '' \; | grep '<today>'。后者应该什么都不返回,因为find 使用-mtime +13 不应该找到今天创建/修改的文件。然而,令我惊讶的是,find 刚刚吐出了今天修改/创建的所有文件的列表!

【问题讨论】:

您确定您或其他人没有修改这些文件吗?! 查看-daystart 查找选项。您的查找正好倒数 24*13 小时,留下可能是 24*13 - 1 分钟的文件,稍后您的另一个查找会找到这些文件。 刚刚想通了!原因是lsfind 找到一个 mtime +13 的目录,ls 简单地列出它的所有内容,无论文件有什么 mtime(facepalm!)。 您可以使用选项-d 代替ls 仅显示目录名称而不是其所有内容。 始终先测试您的查找命令,将“-delete”替换为“-print”。它还可能在结果列表中包含当前目录 (.),这可能是也可能不是您想要的。 【参考方案1】:
find your/folder -type f -mtime +13 -exec rm  \;

【讨论】:

不适用于包含空格的文件名。 (GNU 特定)find -deletefind -print0 | xargs -0 rm @grebneke:你能用例子或事实来支持你的陈述吗? find 在文件名中的空格和有趣符号方面众所周知是安全的。 这确实适用于我 redhat linux/bash 的带有空格的文件名。 只需将 括在引号中:find your/folder -type f -mtime +13 -exec rm "" \; 不需要额外的xargs 命令,只需使用find your/folder -type f -mtime +13 -delete【参考方案2】:

这对我有用。

$ find ./folder_name/*  -type f -mtime +13 -print | xargs rm -rf

【讨论】:

-r 开关没用。此外,如果您的文件名包含空格或其他有趣的符号,您会遇到问题。如果您的实用程序支持它们,请使用-print0xargs -0 ...,否则使用@Mindx 的答案。或者,如果您的find 支持它,请使用find-delete 测试:find ./folder_name -type f -mtime +13 -delete 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案3】:

最简单的解决方案是在@navid 和@gniourf_gniourf 的cmets 中。因为它被埋在 cmets 中,所以我想把它提高到更明显的地方。

find your/folder -type f -mtime +13 -delete

这避免了文件名中的空格和诸如此类的任何可能的问题,并且它不会启动另一个可执行文件来执行删除,因此它也应该更快。

我对此进行了尝试和测试。

【讨论】:

以上是关于在 bash 中查找超过 X 天的文件并删除的主要内容,如果未能解决你的问题,请参考以下文章

linuxfind查找大于多少天的文件,并删除之

Linux使用find查找最后修改时间超过三天的文件并移动到指定目录

删除超过x年或数天的文件

bash脚本通过每天保留1个备份来删除超过7天的备份[重复]

Oracle SQL Where 子句查找超过 30 天的日期记录

自动从 Google 共享驱动器中删除超过 X 天的文件?