Как найти файлы, которые изменились за определенный промежуток времени?

Как найти файлы, которые изменились за определенный промежуток времени?

У меня есть windows 7 box с установленным cygwin. У меня есть несколько папок с файлами в одной корневой папке. Я хочу найти список файлов, имеющих временную метку в определенном диапазоне дат и времени.

решение1

Вы можете использовать findкоманду с -newerXYопцией.

Отman find:

-newerXYссылка
Сравнивает временную метку текущего файла сссылка.ссылкаАргументом обычно является имя файла (и одна из его временных меток используется для сравнения), но это также может быть строка, описывающая абсолютное время.ИксиИявляются заполнителями для других букв, и эти буквы выбирают, какое время относится к тому, какссылкаиспользуется для сравнения.

Возможные значения дляИксиИследующие:

  • а - время последнего доступа к текущему файлу илиссылка
  • B - время создания текущего файла илиссылка
  • c - время последнего изменения статуса инода текущего файла илиссылка
  • m - время последнего изменения текущего файла илиссылка
  • т -ссылкапредставляет собой строку, представляющую временную метку (недопустимо дляИкс)

Иксотносится к текущему файлу иИкссылка, поэтому вам нужно будет использовать «m» для первой буквы (текущая дата изменения файла) и «t» для второй (метка времени, переданная как строка). Пример скрипта:

find . -type f -newermt "2012-05-01" ! -newermt "2012-05-15"

Это позволяет найти все файлы, которые были изменены в период с 1 по 15 мая 2012 года. Оператор !(логический NOT) меняет значение следующего за ним аргумента на противоположное — если -newerXYозначает «X новее, чем Y», то ! -newerXYозначает «X старше, чем Y».


Альтернативный вариант, поскольку вы работаете в Windows, — использовать Powershell.Get-ChildItemКомандлет возвращает все файлы в указанной папке (рекурсивно, если необходимо), аWhere-ObjectКомандлет позволяет фильтровать вывод других команд. Пример скрипта (предполагается, что каталог, в котором вы хотите выполнить поиск, является текущим):

Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -ge "2012-05-01" -and $_.LastWriteTime -le "2012-05-15" -and !$_.PSIsContainer }

Это возвращает все файлы, измененные между 1 и 15 мая 2012 года. Вы можете использовать CreationTimeвместо LastWriteTimeдля проверки времени создания файла. !$_.PSIsContainerФильтр возвращает только файлы ( PSIsContainerистинно для папок, а восклицательный знак снова является логическим NOTоператором).

решение2

Вы можете использоватьДальний менеджер, Find Fileс фильтром:введите описание изображения здесь

Нажмите кнопку фильтра, затем нажмите Insert, чтобы вставить новый фильтр:введите описание изображения здесь

Назовите фильтр как-нибудь, введите маску файла, установите флажок Date/Time, выберите значение change, снимите флажок Relativeи введите диапазоны даты/времени:введите описание изображения здесь

Нажмите «ОК», а в поле Filters menuнажмите space, чтобы выбрать фильтр ( +он должен появиться рядом с фильтром):введите описание изображения здесь

Нажмите Enter и нажмите Find:введите описание изображения здесь

Результаты поиска (в данном примере фотографии - маска IMG_*.jpg- диапазон дат на июнь 2022 г.):введите описание изображения здесь

решение3

Также возможно найти эти файлы с помощью GUI File Explorer. Некоторые примеры:

datemodified:2015-02-18 08:00..2015-02-18 13:00
datemodified:>2015-02-18 08:00
datemodified:<2015-02-18 08:00

И еще немного литературы для чтения: Дополнительные советы по поиску в Windows, Использование расширенного синтаксиса запроса программным способом

Связанный контент