我如何使用find
来选择最近一分钟内已写入但未修改的文件?
我知道我可以反过来做,用 查找过去 60 秒内修改过的文件-mtime -60s
,但我想要过去 60 秒内未被修改的文件。
我使用 Linux,如果使用秒,则会出现此错误:
find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
答案1
使用find /path -type f -mtime +60s
数字前的-
不是常规的“参数破折号”,而是表示“小于”。+
然后是“大于”。
从man find
:
所有采用数字参数的基数都允许在数字前加上加号(“+”)或减号(“-”)。前面的加号表示“大于 n”,前面的减号表示“小于 n”,两者都不表示“正好是 n”。
需要注意的是正好 n,时间是四舍五入的。因此1
(1天)并不意味着86400秒。
答案2
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
答案3
第二个-
是-mtime -60s
不是选项分隔符。
-mtime
是一个选项,后面跟着一个选项参数。选项参数是-60s
,其中-
的 是选项参数本身的一部分,不是选项分隔符。表示“少于 60 秒”。选项参数60s
和+60s
分别表示“等于 60 秒”和“大于 60 秒”。
Apple MacOS 手册和 FreeBSD 手册仅在一个地方提到+
和-
前缀,并且忘记在任何地方解释它们是什么。这就是它们的含义。
(有趣的是,GNU 的 GNU Info 手册也find
有同样的遗漏。但是,GNUfind
的时间语法与 BSD 和 MacOS 语法略有不同find
。)
进一步阅读
- 苹果公司成立(2008-02-24)。
find
MacOS 10 手册页. MacOS 10 开发者库。 find
(1). 2010-03-17. FreeBSD 通用命令手册. FreeBSD 项目.
答案4
在 Unix 系统中,-mtime 后面跟着一个 +/-,后面跟着一个数字,后面跟着时间单位。[+-]nn[dms]
Linux 使用 mtime 表示天,mmin 表示分钟,但似乎没有秒选项,也不使用时间单位说明符。+ 或 - 仍然表示大于或小于时间,而不是如上所述的选项参数。
您可以使用 -mmin 1,但是https://unix.stackexchange.com/questions/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds讨论如何处理秒数。