删除目录中所有超过指定时间的文件(Ubuntu)

删除目录中所有超过指定时间的文件(Ubuntu)

我在一个目录中有一堆具有不同名称的文件,我想删除所有超过指定时间的文件。

例子:

File1
File2
File3

File1 was made Mar 31 08:00
File2 was made Mar 31 08:01
File3 was made Mar 31 08:05

我想删除一个目录中 3 月 31 日 08:04 之前创建的所有内容。

此外,创建日期是最后修改日期,它们永远不会改变,也永远不会被更新。

答案1

假设只有常规文件,没有像子目录或其他类似文件的对象之类的奇怪的东西。

find -not -newermt "Mar 31 08:04" -delete

要查看要删除的文件,请先运行-delete

-not -newermt表示查找修改时间早于给定时间字符串的文件。

时间字符串的解析方式与date工具相同。您可以像这样测试时间字符串:

date -R -d "Mar 31 08:04"

我的系统上的输出:

Tue, 31 Mar 2015 08:04:00 +0200

如果date拒绝你的字符串那么就会find -newermt

请注意,date(因此find)也接受一些自然语言时间表达,如“2 周前”或“1 个月前”。

find有关更多信息,请阅读和的手册页。手册页中列出了date选项的解释。-newermt-newerXY

答案2

只是为了使故事完整,因为当我们想要删除目录中超过指定时间的所有文件时,最好指定该指定时间,例如两周或一个月,而不是指定固定的日期字符串。

如果是这样,让我介绍一个现成的 Ubuntu 软件包—— tmpreaper

描述:根据文件年龄清理目录中的文件

此软件包提供了一个可用于清除临时文件目录的程序。它以递归方式搜索目录,拒绝跨符号链接执行 chdir(),并删除在用户指定的时间内未访问的文件。您可以使用 shell 模式指定一组要防止删除的文件。它不会删除进程 EUID 所拥有的位已清除的文件w,除非您要求它这样做,就像 一样 rm -f。除非给出允许其这样做的命令行选项,否则“tmpreaper”不会删除符号链接、套接字、fifo 或特殊文件。

相关内容