Ответ 1
Это немного отличается от решения Banthar, но оно будет работать с версиями find
, которые не поддерживают -newermt
, и он показывает, как использовать команду xargs
, которая является очень полезным инструментом.
Вы можете использовать команду find
для поиска файлов "определенного возраста". Это найдет все файлы, измененные между 5 и 10 днями назад:
find /directory -type f -mtime -10 -mtime +5
Чтобы затем выполнить поиск этих файлов для строки:
find /directory -type f -mtime -10 -mtime +5 -print0 |
xargs -0 grep -l expression
Вы также можете использовать переключатель -exec
, но я нахожу xargs
более читаемым (и он часто будет работать лучше, но, возможно, не в этом случае).
(Обратите внимание, что флаг -0
позволяет этой команде работать с файлами со встроенными пространствами, такими как this is my filename
.)
Обновление для вопроса в комментариях
Когда вы предоставляете несколько выражений в find
, они объединяются вместе. Например, если вы запрашиваете:
find . -name foo -size +10k
... find
будет возвращать только те файлы, которые оба (a) с именем foo
и (b) больше 10 килобайт. Аналогично, если вы укажете:
find . -mtime -10 -mtime +5
... find
будет возвращать только файлы, которые (а) новее, чем 10 дней назад, и (б) старше 5 дней назад.
Например, в моей системе в настоящее время:
$ date
Fri Aug 19 12:55:21 EDT 2016
У меня есть следующие файлы:
$ ls -l
total 0
-rw-rw-r--. 1 lars lars 0 Aug 15 00:00 file1
-rw-rw-r--. 1 lars lars 0 Aug 10 00:00 file2
-rw-rw-r--. 1 lars lars 0 Aug 5 00:00 file3
Если я попрошу "файлы, измененные более 5 дней назад (-mtime +5
), я получаю:
$ find . -mtime +5
./file3
./file2
Но если я попрошу "файлы, измененные более 5 дней назад, но менее 10 дней назад" (-mtime +5 -mtime -10
), я получаю:
$ find . -mtime +5 -mtime -10
./file2