我在一个目录中有一堆具有不同名称的文件,我想删除所有超过指定时间的文件。
例子:
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 或特殊文件。