删除早于X分钟的文件

36

我想删除那些超过59分钟的旧文件。我现在有这个:

find /tmp -daystart -maxdepth 1 -mmin +59 -type f -name "*.*" -exec rm -f {} \;

这个方法不起作用,而且似乎会删除所有文件。我已经测试了几次,我认为问题与 daystart 有关。

我已经阅读了man手册,它似乎基于一天的开始计算时间,而不是从24小时之前开始计算。如果是这样,那么我如何准确地删除早于59分钟的文件?我需要考虑 daystart 并添加更多的分钟吗?

例子:

ubuntu@ip-10-138-30-118:/tmp$ ls -la
total 8
drwxrwxrwt  2 root   root   4096 Jul 20 14:39 ./
drwxr-xr-x 23 root   root   4096 Jun 25 18:34 ../
-rw-rw-r--  1 ubuntu ubuntu    0 Jul 20 12:35 a.txt

以下两个命令都会返回文件:

ubuntu@ip-10-138-30-118:/tmp$ find /tmp -daystart -maxdepth 1 -mmin +59 -type f -name "*.*"
/tmp/a.txt

而且:

ubuntu@ip-10-138-30-118:/tmp$ find /tmp -daystart -maxdepth 1 -mmin +359 -type f -name "*.*"
/tmp/a.txt

然而,该文件不早于 659 分钟(10.9 小时)!但在 759 分钟(12.65 小时),它就再也没有返回该文件了?


2
顺便说一下,我喜欢参数-delete而不是-exec rm -f {} \; - lanes
2个回答

38

如果与-mmin一起使用,-daystart似乎会使其从今天的结束计算,而不是从开始计算。

如果您只想查找修改时间超过59分钟的文件,则不需要该选项。默认情况下,-mmin从当前时间计算。

barmar@dev:~/testdir$ date
Sat Jul 20 10:02:20 CDT 2013
barmar@dev:~/testdir$ ls -l
total 0
-rw-r--r-- 1 barmar adm 0 Jul 20 09:57 a.txt
barmar@dev:~/testdir$ find . -maxdepth 1 -mmin +2 -type f
./a.txt
barmar@dev:~/testdir$ find . -maxdepth 1 -mmin +10 -type f

嘿@Barmar,你帮我省了不少时间,老兄,点赞! - Haisum Usman
2
嘿,@大家好,只需在末尾添加“-delete”即可立即删除它们,例如:find . -maxdepth 1 -mmin +10 -type f -delete。 - Haisum Usman

16

这对您应该有效。

查找 /path 目录下 59 分钟前修改的并且是文件类型的所有文件,并执行删除操作,同时打印出详细信息。


尾随反斜杠的作用是什么? - Matt
@Matt 在分号前的反斜杠是用来转义分号的,因为 ; 是用于分隔 shell 命令的列表运算符。 - mati kepa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接