Объяснение команды find -mtime

Я пытаюсь удалить все зарегистрированные журналы, кроме последних. Прежде чем выполнить script, чтобы удалить файлы, я хочу, конечно, проверить мои команды, чтобы убедиться, что я поднимаю точные резултаты.

При выполнении этих команд дата:

Sep  1 00:53:44 AST 2014

Список каталогов:

Aug 27 23:59 testfile.2014-08-27.log
Aug 28 23:59 testfile.2014-08-28.log
Aug 29 23:59 testfile.2014-08-29.log
Aug 30 23:59 testfile.2014-08-30.log
Aug 31 23:59 testfile.2014-08-31.log
Sep  1 00:29 testfile.log

Я думал, что -mtime +1 должен был перечислить все файлы за один день. Почему не указан список 8-30.log?

find . -type f -mtime +1 -name "testfile*log"
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

Это желаемый эффект, но это была просто пробная версия и ошибка. Что это говорит 0?

find . -type f -mtime +0 -name "testfile*log"
./testfile.2014-08-30.log
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

Ответы

Ответ 1

В спецификации POSIX для find говорится:

-mtime n    Первичный должен оцениваться как истинный, если время изменения файла, вычитаемое из времени инициализации, деленное на 86400 (с любым остальным отброшенным), составляет n.

Интересно, что описание find больше не указывает "время инициализации". Вероятно, это время, когда find инициализируется (выполняется).

В описаниях, где n используется как первичный аргумент, он должен интерпретироваться как десятичное целое число, которому необязательно предшествует знак плюса (+) или знак минус-знака ('-') следующим образом:

+n    Больше, чем n.
  n    Точно n.
-n    Менее n.

В данный момент (2014-09-01 00:53:44 -4: 00, где я выхожу, что AST - это стандартное время в Атлантике, и поэтому часовой пояс, смещенный от UTC, равен -4: 00 в ISO 8601, но +4: 00 в ISO 9945 (POSIX), но это не имеет большого значения):

1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00

так:

1409547224 - 1409457540 = 89684
89684 / 86400 = 1

Даже если значения "секунды с эпохи" неверны, относительные значения верны (для некоторого часового пояса где-то в мире они правильны).

Значение n, рассчитанное для файла журнала 2014-08-30, в точности равно 1 (расчет выполняется с помощью целочисленной арифметики), а +1 отклоняет его, потому что это строго сравнение > 1 (а не >= 1).

Ответ 2

+1 означает 2 дня назад. Он округлен.

Ответ 3

Вы можете использовать команду find с mtime

например:

 find /path of the folder -type f -mtime +30

-type относится к типу файла

+30 относится к дате до текущей даты

для дополнительных опций мы можем ссылаться http://man7.org/linux/man-pages/man1/find.1.html