Вопрос по ubuntu, linux – Grep внутри всех файлов, созданных в диапазоне дат

24

Я нахожусь на ОС Ubuntu. Я хочу использовать слово (скажем, XYZ) во всех файлах журналов, созданных в период с 28 мая 2012 г. по 30 мая 2012 г.

Как я могу это сделать?

Связанный вопрос в сбое сервера:serverfault.com/q/122824/36963 brandizzi

Ваш Ответ

3   ответа
32

Это немного отличается от решения 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.)

Update for question in comments

Когда вы предоставляете несколько выражений дляfind, они вместе. Например, если вы попросите:

find . -name foo -size +10k

...find будет возвращать только те файлы, которые оба (а) названыfoo and (б) больше 10 кбайт. Аналогично, если вы укажете:

find . -mtime -10 -mtime +5

...find будет возвращать только файлы, которые (а) новее, чем 10 дней назадand (б) старше 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

Если я запрашиваю & quot; файлы, измененные более 5 дней назад (-mtime +5) Я получил:

$ find . -mtime +5
./file3
./file2

Но если я попрошу & quot; файлы, измененные более 5 дней назад, но менее 10 дней назад & quot; (-mtime +5 -mtime -10), Я получил:

$ find . -mtime +5 -mtime -10
./file2
Может кто-нибудь объяснить, как указание -mtime дважды используется для указания диапазона? В частности, почему отрицательное число для первого случая и положительное число для второго? Либо я этого не понимаю, либо он не работает в Ubuntu 14.04.3 LTS. Это не обсуждается на странице руководства, которую я вижу.
@battey, я обновил свой ответ ответом на твой вопрос.
-1

find Похоже, что у вас нет вариантов, в которых вы можете указать конкретные даты для сравнения временных меток (по крайней мере, версия на моем ноутбуке не имеет - могут быть другие версии и / или другие инструменты, которые работают аналогичным образом), поэтому вам придется использовать количество дней Итак, по состоянию на 2012/06/05 вы хотите найти файлы, которые не старше 9 дней, но старше 6 дней:

find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
Почему бы и нет-mtime (время модификации)?-ctime для времени статуса (что бы это ни было).
15

Объединить grep снаходить:

find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
это-newermt Опция кажется недокументированной - она не появляется ни в ссылке, ни в моих справочных страницах. Однако это замечательно! Как вы это обнаружили?
@brandizzi Это под-newerXY.

Похожие вопросы