gpt4 book ai didi

unix - "find command -mtime 0"没有得到我期望的文件

转载 作者:行者123 更新时间:2023-12-04 10:57:32 30 4
gpt4 key购买 nike

我正在尝试查找 0 天前的文件。以下是我执行的测试步骤

$ ls
$ ls -ltr
total 0
$ touch tmp.txt
$ ls -ltr
total 0
-rw-r----- 1 tstUser tstUser 0 Feb 28 20:02 tmp.txt
$ find * -mtime 0
$
$ find * -mtime -1
tmp.txt
$

为什么“-mtime 0”没有给我文件?

“-mtime 0”和“-mtime -1”之间的确切区别是什么?

我确定一定有其他方法可以在 unix 中找到 0 天前的文件,但我很好奇理解这个“-mtime”实际上是如何工作的。

最佳答案

这不是 find 的用户友好方面- 您必须了解匹配实际上如何工作才能正确定义您的搜索条件。以下解释基于 GNU find (findutils) 4.4.2。
find测试 -atime , -ctime , -mtime在 24 小时内工作,因此让我们将“文件年龄”定义为

floor (current_timestamp - file_modification_timestamp / 86400)

给定 1 小时前、25 小时前和 49 小时前修改的三个文件

$ touch -t $(date -d "1 hour ago" +"%m%d%H%M") a.txt
$ touch -t $(date -d "25 hours ago" +"%m%d%H%M") b.txt
$ touch -t $(date -d "49 hours ago" +"%m%d%H%M") c.txt

文件年龄(如上定义)是

$ echo "($(date +"%s") - $(stat -c %Y a.txt)) / 86400" | bc
0
$ echo "($(date +"%s") - $(stat -c %Y b.txt)) / 86400" | bc
1
$ echo "($(date +"%s") - $(stat -c %Y c.txt)) / 86400" | bc
2

鉴于上述情况,这是 find 的作用

$ find -type f -mtime 0 # find files with file age == 0, i.e. files modified less than 24 hours ago
./a.txt
$ find -type f -mtime -1 # find files with file age < 1, i.e. files modified less than 24 hours ago
./a.txt
$ find -mtime 1 # find files with file age == 1, i.e. files modified more than (or equal to) 24 hours ago, but less than 48 hours ago
./b.txt
$ find -mtime +1 # find files with file age > 1, i.e. files modified more than 48 hours ago
./c.txt

这表明 -mtime 0-mtime -1给出等价的结果。
-mmin以更精细的粒度提供相同的测试 - 参数是分钟而不是 24 小时。

我无法使用上述版本的 find 重现您的问题

$ touch tmp.txt
$ find * -mtime 0
tmp.txt
$ find * -mtime -1
tmp.txt

关于unix - "find command -mtime 0"没有得到我期望的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5141783/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com