find mmin X 分钟 - 启动“查找”时或“查找”找到文件时是 X 分钟吗?

find mmin X 分钟 - 启动“查找”时或“查找”找到文件时是 X 分钟吗?

假设我的文件夹中有大约 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 分钟后,它仍然匹配。findsleep 120a


由于-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能够搜索在命令开始时间之后修改的文件。

相关内容