Это не удобный для пользователя аспект 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 -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