Добрый день.
Я пытаюсь создать сценарий bash, который будет сравнивать все файлы в каталоге с определенной меткой времени. Эта метка времени хранится в переменной. Если дата создания файла отличается от метки времени на несколько секунд, будет напечатано имя файла.
Кажется, что лучше всего подойдет команда find. До сих пор я пробовал:
find /directory/*.txt -type -f -newer $TimestampVariable
(with $TimestampVariable = "Wed May 11 13:53:20 EDT 2022")
как отправная точка. Но это не сработает, потому что он не считывает метку времени в переменной и не сравнивает ее с диапазоном времени между $TimestampVariable и пятью секундами позже.
Команда GNU find ожидает имя файла для ссылки после параметра -newer, а не отметку времени. Смотрите man find.
Я использую сценарии bash в Red Hat Linux.
-newer сравнивает mtime, а не «дату создания файла». Большинство файловых систем даже не записывают время создания файла.





В GNU и BSD find вы можете использовать предикат -newerXY.
Например, если вы ищете все файлы, измененные между Wed May 11 13:53:20 EDT 2022 и Wed May 11 13:53:25 EDT 2022, вы можете сделать:
find . -type f -newermt 'Wed May 11 13:53:19 EDT 2022' -not -newermt 'Wed May 11 13:53:26 EDT 2022'
Затем, учитывая переменную метки времени в следующем формате:
TimestampVariable = "Wed May 11 13:53:20 EDT 2022"
Вот как вы можете сгенерировать две даты, необходимые для предикатов -newerXY (я решил сгенерировать даты в формате ISO-8601, потому что он хорошо поддерживается).
min=$(date -d "$TimestampVariable -1sec" --iso-8601=second)
max=$(date -d "$TimestampVariable +6sec" --iso-8601=second)
min=$(date -j -v-1S -f '%a %b %d %T %Z %Y' "$TimestampVariable" +%Y-%m-%dT%T%z)
max=$(date -j -v+6S -f '%a %b %d %T %Z %Y' "$TimestampVariable" +%Y-%m-%dT%T%z)
Теперь вы можете сделать:
find . -type f -newermt "$min" -not -newermt "$max"
Благодарю вас! будет ли предикат -newerxy принимать переменную в качестве аргумента, если переменная хранит метку времени?
Обновлен мой ответ
Огромное спасибо. Это сделало трюк! Единственное изменение, которое я сделал, это поменять местами переменные $min и $max в команде find.
Добавьте пример для TimestampVariable к вашему вопросу (без комментариев).