假设我的文件夹中有大约 10,000 个文件。我一直在使用每小时 crontab 来查找过去 60 分钟内修改的文件,然后对其进行处理。
find -mmin -60
在 01:00:00调用
假设第一个文件在 00:00:00 被修改,并在 01:00:00 通过“查找”轻松找到。
然后,假设第 10,000 个文件也在 00:00:00 被修改
但现在是 01:10:00而“查找”仍在努力到达第10000个文件
那么现在,70 分钟后,“find”会返回在 00:00:00 修改的第 10,000 个文件吗?
答案1
在 GNU 中find
,用于评估文件-mmin
等的参考时间是解析表达式时计算并存储find
,因此在启动时生效。
find
这意味着所有此类时间比较对所有评估的文件使用相同的时间参考,即解析其命令行的时间。
答案2
假设 GNU find,这很容易测试:
% mkdir foo; cd foo; touch a b
% find -mmin 1
.
./a
./b
% find -mmin 1 -exec sleep 120 \; -print
. # 2 minutes wait before this showed up
./a # another 2 minutes before this showed up
./b # and another 2 minutes for this one
% find -mmin 1
%
因此,即使最后一次修改是在运行forb
至少 4 分钟后,它仍然匹配。find
sleep 120
a
由于-mmin
不是 POSIX,这取决于实现,但我期望上面看到的行为。
答案3
在两个终端中依次尝试以下命令
1号航站楼:
find /path -mmin -0.017 -printf "$(date) %Tc %p\n" | grep '/path/to/some/file'
2 号航站楼:
touch -d " 0 seconds ago" /path/to/some/file
我们能够得到的结果是
Wed Jul 17 11:48:33 IST 2019 Wed 17 Jul 2019 11:48:34 AM IST /path/to/some/file
我在命令的开始时间前面加上查找结果。它表明,find
能够搜索在命令开始时间之后修改的文件。