Сценарий bash, который сравнивает время создания всех файлов в каталоге с отметкой времени, хранящейся в переменной

Добрый день.

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

Кажется, что лучше всего подойдет команда find. До сих пор я пробовал:

find /directory/*.txt -type -f -newer $TimestampVariable
(with $TimestampVariable = "Wed May 11 13:53:20 EDT 2022")

как отправная точка. Но это не сработает, потому что он не считывает метку времени в переменной и не сравнивает ее с диапазоном времени между $TimestampVariable и пятью секундами позже.

Добавьте пример для TimestampVariable к вашему вопросу (без комментариев).

Cyrus 13.05.2022 23:03

Команда GNU find ожидает имя файла для ссылки после параметра -newer, а не отметку времени. Смотрите man find.

Cyrus 13.05.2022 23:17

Я использую сценарии bash в Red Hat Linux.

Scott Zuris 14.05.2022 00:04
-newer сравнивает mtime, а не «дату создания файла». Большинство файловых систем даже не записывают время создания файла.
William Pursell 14.05.2022 00:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В 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, потому что он хорошо поддерживается).

  • в Linux:
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 принимать переменную в качестве аргумента, если переменная хранит метку времени?

Scott Zuris 13.05.2022 22:57

Обновлен мой ответ

Fravadona 14.05.2022 00:09

Огромное спасибо. Это сделало трюк! Единственное изменение, которое я сделал, это поменять местами переменные $min и $max в команде find.

Scott Zuris 16.05.2022 16:05

Другие вопросы по теме