"find command -mtime 0" не получает ожидаемый файл - PullRequest
7 голосов
/ 28 февраля 2011

Я пытаюсь найти файл, возраст которого 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 '?

Я уверен, что должны быть другие способы найти файлы, возраст которых 0 дней в Unix, но мне интересно понять, как на самом деле работает это -mtime.

Ответы [ 3 ]

6 голосов
/ 14 ноября 2012

Это не удобный для пользователя аспект 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
5 голосов
/ 28 февраля 2011
   -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 будет ровно один день.

0 голосов
/ 12 ноября 2013

Значения этих трех возможностей следующие:
n: ровно n 24-часовых периодов (дней) назад, 0 означает сегодня.
+ n: «больше n n 24-часовых периодов (дней) назад» или старше n,
-n: меньше чем n 24-часовых периодов (дней) назад (-n) или младше, чем n. Очевидно, что -1 и 0 одинаковы и оба означают "сегодня" .

ПРИМЕЧАНИЕ : если вы используете параметры с командой find в скриптах, будьте осторожны, когда параметр -mtime равен нулю. Некоторые (более ранние) версии GNU считают неправильно интерпретировать следующее выражение Sourece: http://www.softpanorama.org/Tools/Find/index.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...