查找命令时参数值令人困惑

查找命令时参数值令人困惑

寻找手动的:

mtime n
File's data was last modified n*24 hours ago.  

所以

find . -mtime 0

应该找到n*24小时前修改的内容,即0*24小时前,即0小时前。但事实并非如此。我认为它会找到 24 小时前和当前时刻之间修改的内容。

然后

find . -mtime 0

等于

find . -mtime -1

我对吗?说明书有错吗?

这些是我的想法(已编辑):

-mtime -1, file was modified less than 24 hours ago
-mtime -0, file was modified less than 24 hours ago
-mtime 1, file was modified **exactly** 24 hours ago

-mtime +1, file was modified more than 24 hours ago
-mtime +0, file was modified more than 24 hours ago.
-mtime 0, file was modified **exactly** 24 hours ago

我想我还没有搞清楚,因为find . -mtime 0正在调出我在 24 小时前没有修改过的文件

编辑2:

好吧,我真的什么都不明白,但我想这是正确的备忘单:

find . -mtime +0 # find files modified greater than 24 hours ago
find . -mtime 0 # find files modified between now and 1 day ago
# (i.e., in the past 24 hours only)
find . -mtime -1 # find files modified less than 1 day ago (SAME AS -mtime 0)
find . -mtime 1 # find files modified between 24 and 48 hours ago
find . -mtime +1 # find files modified more than 48 hours ago

答案1

通过实证检验,这是相当容易理解的。让我们设置五个空文件并将它们的修改时间设置为以下值:

$ touch -d '50 hours ago' a
$ touch -d '40 hours ago' b
$ touch -d '30 hours ago' c
$ touch -d '20 hours ago' d
$ touch -d '10 hours ago' e

find通过计算从执行命令的时间起的 24 小时周期数来计算 atime/mtime/ctime 测试的结果。在此计算期间忽略小数部分。

因此,让我们将这些值相除并找出相应的 24 小时周期数:

a: 50/24 = 2
b: 40/24 = 1
c: 30/24 = 1
d: 20/24 = 0
e: 10/24 = 0

接下来,我们将了解如何指定参数。允许三种形式find:n(完全匹配)、+n(大于)、-n(小于)。

接下来,让我们find对这些文件运行一些命令并查看结果。

  • find . -mtime 0返回文件 d 和 e(值 0)。
  • find . -mtime 1返回文件 b 和 c(值 1)。

您会注意到,即使您指定了完全匹配 (n),您仍然会获得一定范围的修改时间。这是因为我们的计算中忽略了小数部分。

让我们继续讨论下一组命令。

  • find . -mtime +0返回文件 a、b 和 c(值 1 和 2)。
  • find . -mtime +1仅返回文件 a(值 2)。

因为find在这些计算过程中忽略了小数部分,所以0之后的下一个值只能是1。同样适用于+1,下一个匹配只能是2。这有点不直观,所以手册中也有说明作为关键点 - “为了匹配 -atime +1,文件必须至少在两天前被访问过”。

最后,我们来看看“小于”范围。

  • find . -mtime -0不返回任何文件。
  • find . -mtime -1返回文件 d 和 e。

-0检查将在将来将文件与修改时间戳进行匹配。这不是一个典型的场景,因此没有包含在本次实验中。检查-1将返回值为 0(即 1 之后的下一个较小值)的文件,这些文件是 d 和 e。

希望这能消除有关这些测试的困惑。最重要的是,即使您在命令行上指定单个整数,您仍然引用 atime/ctime/mtime 测试的范围。

相关内容