查找所有超过一分钟的文件


8

如何使用find选择在最后一分钟内已写入但未修改的文件?

我知道我可以反过来做,找到最近60秒内使用修改过的文件-mtime -60s,但我希望最近60秒内没有修改过的文件。

我使用Linux并在使用秒数时收到此错误:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'

Answers:


13

采用 find /path -type f -mtime +60s

-刚刚的数字之前是不是正规“的说法冲刺”,而是指“小于”。+然后是“超过”。

来自man find

所有带有数字参数的基数都允许数字以加号(``+'')或减号(``-'')开头。前面的加号表示``大于n'',前面的减号表示``小于n'',都不表示``正好n''。

应该注意的是,对于正好为n,时间是四舍五入的。因此1(1天)并不意味着86400秒。


2
严格来说,+60并非与相反-60,出于相同的原因,小于并非与大于:相反:两者都排除了它们要比较的确切值。但是您的问题并没有确切表明您想要哪种行为。
丹尼尔·贝克

确实不完全一样,因为!恢复原始的“查询”。但是同意,OP没有指定他想要什么。
Karolos 2012年

第二天,OP声明它在Linux上而不是Mac OS X上。如果那会改变答案,您可以更新它吗?
彼得·莫滕森

1
是的,这在Linux上不起作用。至少RHEL 5.6。但是,SiegeX在下面的响应确实有效。
MattPark 2013年

2
这在CentOS上不起作用。如预期的那样,它可以在Mac OS X中运行
trante

14
find . -type f -mmin +1

$ ls *
four.txt  one.txt  three.txt  two.txt

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt

不再标记为osx
彼得·莫滕森

4

第二--mtime -60s不是一种选择分隔符。

-mtime是一个选项,后跟一个option参数。选项参数是-60s,并且其中的参数是-选项参数本身的一部分,而不是选项定界符。这意味着“少于60秒”。选项参数60s和分别+60s表示“等于60秒”和“大于60秒”。

Apple MacOS手册和FreeBSD手册仅在一个地方提到了+-前缀,而忘记了在任何地方解释它们的含义。这就是它们。

find有趣的是,有关GNU的GNU Info手册也有相同的遗漏,但是,GNU find的语法有时与BSD和MacOS find语法有所不同。)

进一步阅读


1
这甚至比只在一个地方解释就更糟:所有其他选项都引用atime了时间格式,但这也没有解释前缀。这是未引用的单独部分。
丹尼尔·贝克

确实; 你会发现我写的。我写了“提”,“忘了在任何地方解释”。☺
JdeBP

我并不是要与您矛盾,只是想指出,从“让我们略过手册页” POV 来看,恰好一个地方也是最糟糕的地方
丹尼尔·贝克

但这并没有在一个地方解释。根本没有任何解释。以我的经验,对于一组通常编写和编辑得相当不错的手册页,这是令人惊讶的遗漏。
JdeBP 2012年

1
h!那是因为您已经神奇地知道了答案,并且可以在阅读文档时连接吐温,从而填写未实际编写的内容。没有您的先知而正在阅读手册以找出答案的人们不得不怀疑,为什么在任何地方都没有解释“修饰语”的原因。☺
JdeBP

3

您应该可以使用

find . ! -mtime -60s

1
需要为我find . !( -mtime -60s )
加上

@OliverSalzburg:在我的Mac上,没有括号就可以正常工作(Darwin Kernel版本11.2.0)。
Karolos 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.