файлы grep, основанные на отметке времени - PullRequest
8 голосов
/ 13 января 2012

Это должно быть довольно просто, но я не понимаю этого.У меня большая кодовая база более 4 ГБ под Linux.Несколько заголовочных файлов и XML-файлов создаются во время сборки (с помощью gnu make).Если это имеет значение, файлы заголовков генерируются на основе файлов XML.

Я хочу найти ключевое слово в файле заголовка, который был последний раз изменен после определенного момента времени (это мое время начала компиляции), и аналогичным образом, файлы XML,но отдельные запросы grep.

Если я запускаю его для всех возможных заголовочных или xml-файлов, это займет много времени.Только те, которые были созданы автоматически.Кроме того, поиск должен быть рекурсивным, поскольку существует много каталогов и подкаталогов.

Ответы [ 3 ]

13 голосов
/ 13 января 2012

Вы можете использовать команду find:

find . -mtime 0 -type f

печатает список всех файлов (-type f) в текущем каталоге и под ним (.), которые были изменены за последние 24 часа (-mtime 0, 1 будет 48h, 2 будет 72h, .. .). Попробуйте

grep "pattern" $(find . -mtime 0 -type f)
11 голосов
/ 14 января 2012

Чтобы найти 'pattern' во всех файлах, которые новее some_file в текущем каталоге и его подкаталогах, рекурсивно:

find -newer some_file -type f -exec grep 'pattern' {} +

Вы можете указать метку времени непосредственно в формате date -d и использовать другие find тесты, например, -name, -mmin.

Список файлов также может быть сгенерирован вашей системой сборки, если find слишком медленный.

Вместо grep.

можно использовать более конкретные инструменты, такие как ack, etags, GCCSense.
2 голосов
/ 25 февраля 2014

Используйте это.Потому что, если find не возвращает файл, то grep будет продолжать ждать ввода, останавливающего скрипт.

...