Как говорится — у хорошего айтишника и бычий хуй веревка!

Привет. Сегодня про find и временные метки.

У утилиты find есть ключ -newer. Тест (-newer) возвращает истину, если метка X новее метки Y.

Формат теста такой:

-newerXY

Временные метки:

Поддерживаемые форматы (t):

Вот несколько из них, которые можно получить с помощью утилиты date.

date --rfc-3339=ns
date --rfc-2822
date +'@%s.%N'
TZ=UTC0 date +'%Y-%m-%d %H:%M:%S'
date +'%Y-%m-%d %H:%M:%S %z'
LC_ALL=C TZ=UTC0 date

Также date умеет отнимать/прибавлять даты.

date -d'- 1 hours'

Более подробно можешь почитать в гнутой доке. Или заглянуть командой: info coreutils date

Теперь давай поищем файлы в домашнем каталоге, у которых время модификации, менялось с заданной даты. Минус 2 часа от текущего времени.

find ~/ -newermt "$(date --rfc-2822 -d '- 2 hours')"

Ага, получаем ожидаемый список. Ок, теперь создадим файл bashdays.txt, у которого время модификации будет -2 часа от текущего времени.

touch -mt $(date '+%Y%m%d%H%M.%S' -d '-2 hours' ) bashdays.txt

Проверяем:

stat bashdays.txt

Смотрим поле Modify, ага все верно, время -2 часа от текущего времени.

Снова запускаем поиск файлов, у которых время модификации свежее времени модификации файла bashdays.txt

find ~/ -newermm bashdays.txt

Выводим дополнительную информацию со временем модификации найденных файлов:

find ~/ -newermm bashdays.txt -printf '%t\n'
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Допускается задавать разные временные метки искомых файлов и образца. Поиск файлов у которых время модификации новее времени изменения файла bashdays.txt
find ~/ -newermc bashdays.txt -printf '%t\n'

Чтобы узнать, при каких условиях изменяются временные метки. Можете поизучать man-страницы к системному вызову stat.

Где это можно применить? Ну например, для зачистки старых бэкапов, если предпочитаешь использовать для этого самописные скрипты. На самом деле дофига где применить можно, всё зависит от фантазии и потребностей.

Завтра выходной строим, в воскресенье вернусь. Хороших предстоящих выходных, береги себя!