“find command -mtime 0”没有得到我期望的文件

时间:2011-02-28 12:10:46

标签: unix

我正在尝试找到一个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'实际上是如何工作的。

3 个答案:

答案 0 :(得分:6)

find这不是用户友好的方面 - 您必须了解匹配实际上如何正确定义您的搜索条件。以下说明基于GNU find(findutils)4.4.2。

find测试-atime-ctime-mtime工作24小时,因此我们将“文件年龄”定义为

floor (current_timestamp - file_modification_timestamp / 86400)

鉴于3小时前,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 -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

答案 1 :(得分:5)

   -mtime n
          File's data was last modified n*24 hours ago.  See the  comments
          for -atime to understand how rounding affects the interpretation
          of file modification times.

因此,-mtime 0将等于:“文件的数据是在0小时前修改的。 而-mtime 1将是:“文件的数据最后修改时间为24小时”

编辑:

   Numeric arguments can be specified as

   +n     for greater than n,

   -n     for less than n,

   n      for exactly n.

所以我猜-1会在过去24小时内被修改,而1则恰好是一天。

答案 2 :(得分:0)

这三种可能性的含义如下:
n:恰好是n个24小时(天)之前,0表示今天。
+ n:“超过24小时(天)之前”,或者更早,然后是n,
-n:少于n个24小时(天)之前(-n),或者小于n。 很明显-1和0是相同的,都意味着“今天”

注意:如果在脚本中使用带有find命令的参数,则在-mtime参数等于零时要小心。一些(早期)版本的GNU发现错误地解释了以下表达式 Sourece:http://www.softpanorama.org/Tools/Find/index.shtml