2

В системе Red Hat Linux у меня есть каталог с несколькими сотнями файлов. Я хотел удалить все файлы старше 24 часов. Я сделал удаление, используя find . -type f -mtime +1 -delete . Тривиальные вещи, верно? Затем, проверяя результаты, я обнаружил, что ls -l сообщает о файлах старше 24 часов в каталоге. Обратите внимание на дату ниже и результат последней находки:

> date
Sun Jan  5 19:02:43 PST 2014
> find . -type f -mtime +1 | wc -l
0
> find . -type f | xargs /bin/ls -l | grep 'Jan  3' | wc -l
70

Любопытно, что нет файлов старше, чем около 48 часов. (Там определенно были раньше.) На данный момент, однако, я хорошо и по-настоящему озадачен. Я, наверное, упускаю что-то очевидное, но что? Может кто-нибудь, пожалуйста, просветите меня?

1 ответ1

3

Для find «+1» означает больше, чем 1. Кроме того, при вычислении возраста в днях он округляется до ближайшего целого числа.

Это поведение описано в справочной странице:

Когда команда find определяет, сколько 24-часовых периодов назад к файлу последний раз обращались, любая дробная часть игнорируется, поэтому для соответствия -atime +1 файл должен был быть получен как минимум два дня назад.

В вашем примере эти два полных дня означают, что он должен был найти файлы, только если они были старше 3 января 19:02:43. Любой файл, сделанный после этого 3 января, не будет найден.

Итак, когда вы написали «Любопытно, что нет файлов старше 48 часов», это означает, что find ведет себя точно так, как задокументировано, каким бы извращенным это ни было.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .