Я на ОС Ubuntu. Я хочу найти слово (скажем, XYZ) во всех файлах журналов, созданных в диапазоне дат с 28 мая 2012 года по 30 мая 2012 года.
Как я могу это сделать?
Я на ОС 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
.)
Обновление для вопроса в комментариях
Когда вы предоставляете несколько выражений для find
, они объединяются по И. Например, если вы спросите:
find . -name foo -size +10k
...find
будет возвращать только файлы, которые (а) имеют имя foo
и (б) больше 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
Объедините grep с find:
find -newermt "28 May 2012" -not -newermt "30 May 2012" -exec grep XYZ \{\} \;
-newermt
кажется недокументированной - она не отображается ни в ссылке, ни на моих справочных страницах. Однако это прекрасно! Как вы это обнаружили?
- person brandizzi; 05.06.2012
-newerXY
.
- person Piotr Praszmo; 05.06.2012
find
, похоже, не имеет опций, в которых вы можете указать конкретные даты для сравнения временных меток (по крайней мере, версия на моем ноутбуке не имеет - могут быть другие версии и / или другие инструменты, которые работают аналогично), поэтому вам придется использовать количество дней. Итак, по состоянию на 05.06.2012 вы хотите найти файлы старше 9 дней, но старше 6 дней:
find . -type f -ctime -9 -ctime +6 -print0 | xargs -0 grep XYZ
-mtime
(время модификации)? -ctime
для времени состояния (что бы это ни было).
- person Peter Mortensen; 30.07.2018