Вопрос по ubuntu, linux – Grep внутри всех файлов, созданных в диапазоне дат
Я нахожусь на ОС Ubuntu. Я хочу использовать слово (скажем, XYZ) во всех файлах журналов, созданных в период с 28 мая 2012 г. по 30 мая 2012 г.
Как я могу это сделать?
Это немного отличается от решения 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
find
Похоже, что у вас нет вариантов, в которых вы можете указать конкретные даты для сравнения временных меток (по крайней мере, версия на моем ноутбуке не имеет - могут быть другие версии и / или другие инструменты, которые работают аналогичным образом), поэтому вам придется использовать количество дней Итак, по состоянию на 2012/06/05 вы хотите найти файлы, которые не старше 9 дней, но старше 6 дней:
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
-mtime
(время модификации)?-ctime
для времени статуса (что бы это ни было).
Объединить grep снаходить:
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
-newermt
Опция кажется недокументированной - она не появляется ни в ссылке, ни в моих справочных страницах. Однако это замечательно! Как вы это обнаружили?
-newerXY
.