![如何在 OSX 上为 find 命令指定日期范围?](https://linux22.com/image/1254785/%E5%A6%82%E4%BD%95%E5%9C%A8%20OSX%20%E4%B8%8A%E4%B8%BA%20find%20%E5%91%BD%E4%BB%A4%E6%8C%87%E5%AE%9A%E6%97%A5%E6%9C%9F%E8%8C%83%E5%9B%B4%EF%BC%9F.png)
我需要精确到分钟查找某个日期范围内的文件。我想知道如何精确到秒也许有一天会很有用。无论如何。我已经学会了如何使用 -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"