Реклама

четверг, 16 июля 2015 г.

Как найти файлы, содержащие определенный текст, через шелл терминал Linux

Если нужно быстро получить список файлов, которые содержат искомый текст, а под рукой только командная строка bash Linux OS (Ubuntu, Arch, или что там у Вас), можно воспользоваться такой строкой:

    grep -Ril "искомый текст" {путь, где ищем}

а если Вы захотите сделать фильтр, например, по расширению файла, то я бы советовал сделать так:

    find . -name 'маска файла' -exec grep -i 'текст' {} \; -print

А теперь рассмотрим более детально:
В первом варианте вопросы могут возникнуть с двумя вещами - флаги и как указать путь для поиска. Флагов на самом деле больше, но я опишу те, которыми сам пользуюсь. Флаги "R","i","l" означают:
R - поиск в поддиректориях
i - игнорировать регистр
l - выводить название файла, а не найденный текст
А путь для поиска задается... да как обычно он и задается. Например:
    -хотим найти файлы, содержащие текст "<XML>" начиная с корня файловой системы:
    grep -Ril "<XML>" /
    -или то же самое слово в хоум папке пользователя User:
    grep -Ril "<XML>" /home/User
Также работают относительные пути. Пример - находимся в директории home и ищем в  User файлы с текстом "<XML>":
    grep -Ril "<XML>" ./User

Второй вариант чуть посложнее выглядит, но и возможностей у него побольше. Первым делом мы можем задать маску имени и расширения файлов. Например, ищем слово "String" во всех файлах java в директории /home/User/program/src:

    find /home/User/program/src -name '*.java' -exec grep -i 'String' {} \; -print

И то же самое с относительными путями, если мы уже находимся в директории /home/User/program/src:

    find . -name '*.java' -exec grep -i 'String' {} \; -print

На сегодня все. Не теряйте свои данные!

1 комментарий: