У меня есть 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
, чтобы выбрать фильтр ( +
он должен появиться рядом с фильтром):
Результаты поиска (в данном примере фотографии - маска 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, Использование расширенного синтаксиса запроса программным способом