1

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

2 ответа2

2

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

От man find:

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

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

  • a - время последнего доступа к текущему файлу или ссылке
  • B - время рождения текущего файла или ссылки
  • c - время последнего изменения статуса inode текущего файла или ссылки
  • m - время последнего изменения текущего файла или ссылки
  • t - ссылка - это строка, представляющая временную метку (недопустимо для X)

X относится к текущему файлу, а Y - к ссылке, поэтому вы можете использовать «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 имеет значение true для папок, а восклицательный знак снова является логическим оператором NOT ).

-1

Также можно найти эти файлы с помощью 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, использование расширенного синтаксиса запросов программно

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .