如何在 OSX 上为 find 命令指定日期范围?

如何在 OSX 上为 find 命令指定日期范围?

我需要精确到分钟查找某个日期范围内的文件。我想知道如何精确到秒也许有一天会很有用。无论如何。我已经学会了如何使用 -newermt 甚至 -not -newermt;但是,当我将它们组合在一起时,我似乎无法获得正确的结果。我找到了使用 find 的 Linux 示例,但我认为这些开关在 OSX 上不起作用。请参阅以下文件列表:

#$ ls -l
total 32
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test1.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test1_old.swc
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test2.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test2_old.swc
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test3.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test3_old.swc
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test4.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test4_old.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 20:11 test5.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 20:13 test6.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 timestamp.tmp

我希望以下命令返回 test1.swc 到 test4.swc;但是,请注意,它返回了 test6.swc:

#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:13'
./test1.swc
./test2.swc
./test3.swc
./test4.swc
./test6.swc

我认为 -not 条件的分钟数已关闭,因此我尝试了以下操作,但是它没有返回任何内容:

#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:12'
#$ 

我得出结论,我没有正确组合 -newermt 和 -not -newermt 开关。有什么建议可以纠正这个问题吗?

答案1

您的语法看起来正确。您是如何创建这些文件的。我看到使用 touch 更新日期时返回了错误。

在 BSD 中 -a 不是必需的,我倾向于使用 ! 而不是 -not(个人偏好)

当搜索命令帮助时,请记住要搜索 BSD,因为我使用了一些差异FreeBSD 手册页

请记住,文件上除了分钟之外还有内容,因此如果您想要第一秒,则需要标记它。我设置了一个像您这样的结构,当我为秒数添加 :00 时,我可以得到与您相同的结果,这毫无意义。所以我做了一个 ls -lT 并能够看到文件上的秒数,然后运行 ​​find 命令并得到我预期的结果,看起来默认情况下 ! 或 -not 将秒数设置为 59,因此它包括整个分钟。

#$ 查找 . -newermt "2010-10-26 20:11:00" !-newermt "2010-10-26 20:13:00"

相关内容