Найти все файлы содержащие строку linux

Содержание
  1. Как найти все файлы с заданным текстом с помощью командной оболочки Linux
  2. Условные обозначения
  3. Примеры
  4. Нерекурсивный поиск всех файлов с определенной строкой.
  5. Рекурсивный поиск всех файлов с определенной строкой.
  6. Поиск всех файлов, содержащих определенное слово
  7. Вывод только имен файлов, содержащих определенный текст
  8. Поиск без учета регистра
  9. Включение или исключение из поиска заданных имен файлов
  10. Исключение из поиска заданных директорий
  11. Вывод номера строки, содержащей заданную строку
  12. Поиск всех файлов, не содержащих заданную строку
  13. ИТ База знаний
  14. Полезно
  15. Навигация
  16. Серверные решения
  17. Телефония
  18. Корпоративные сети
  19. Рекурсивно найти слово в файлах и папках Linux
  20. Найти фразу в файлах рекурсивно через консоль
  21. Поиск слова через Midnight Commander
  22. Поиск в Linux с помощью команды find
  23. Общий синтаксис
  24. Описание опций
  25. Примеры использования find
  26. Поиск файла по имени
  27. Поиск по дате
  28. По типу
  29. Поиск по правам доступа
  30. Поиск файла по содержимому
  31. С сортировкой по дате модификации
  32. Лимит на количество выводимых результатов
  33. Поиск с действием (exec)
  34. Чистка по расписанию

Как найти все файлы с заданным текстом с помощью командной оболочки Linux

Оригинал: How to find all files with a specific text using Linux shell
Автор: Lubos Rendek
Дата публикации: 30 ноября 2017 года
Перевод: А. Кривошей
Дата перевода: август 2018 г.

В этой статье приведены некоторые полезные советы о том, как найти все файлы в любом конкретном каталоге или во всей файловой системе, содержащие любое заданное слово или строку.

Условные обозначения

# — требует, чтобы данная команда выполнялась с привилегиями root либо непосредственно пользователем root, либо с помощью команды sudo.
$ — данная команда должна выполняться обычным непривилегированным пользователем.

Примеры

Нерекурсивный поиск всех файлов с определенной строкой.

Первый пример команды будет искать строку «stretch» во всех файлах в каталоге /etc/, исключая любые подкаталоги:

Параметр -s будет подавлять сообщения об ошибках о несуществующих или нечитаемых файлах. На выходе отображаются имена файлов, а также выводится строка с запрошенным текстом.

Рекурсивный поиск всех файлов с определенной строкой.

Вышеприведенная команда пропускает все подкаталоги. Рекурсивный поиск означает перемещение по всем подкаталогам. Следующая команда будет искать строку «stretch» во всех файлах в каталоге /etc/, включая все подкаталоги:

Поиск всех файлов, содержащих определенное слово

В приведенном выше примере команды grep перечислены все файлы, содержащие строку stretch. Также показаны строки с stretches, stretched и т. д. Параметр -w grep используется для отображения только определенного слова:

Вывод только имен файлов, содержащих определенный текст

Вышеприведенные команды могут давать избыточный вывод. В следующем примере будут отображаться только имена файлов в каталоге /etc/ рекурсивно, содержащих строку «stretch»:

Поиск без учета регистра

Все поисковые запросы по умолчанию чувствительны к регистру, то есть любой поиск строки «stretch» отображает только файлы, содержащие точные совпадения в верхнем и нижнем регистре. С помощью опции -i команда также будет выводить любые строки, содержащие Stretch, STRETCH, StReTcH и т. д.

Включение или исключение из поиска заданных имен файлов

С помощью команды grep также можно включать в поиск только определенные файлы. Например, мы хотели бы искать конкретный текст/строку только в конфигурационных файлах с расширением .conf. В следующем примере будут найдены все файлы с расширением .conf в каталоге /etc, содержащие строку bash:

Аналогично, используя опцию —exclude, можно исключать любые заданные имена файлов:

Читайте также:  Linux под каким пользователем запущен сервис

Исключение из поиска заданных директорий

Как и файлы, мы можем исключать из поиска заданные директории. Для этого используется опция —exclude-dir. В приведенном ниже примере мы ищем все файлы в директории /etc, содержащие строку stretch, исключая директорию /etc/grub.d

Вывод номера строки, содержащей заданную строку

Используя опцию -n, мы можем получать информацию о номере строки, содержащей заданную строку:

Поиск всех файлов, не содержащих заданную строку

В последнем примере мы используем опцию -v, чтобы вывести список всех файлов, не содержащих заданное ключевое слово:

По приведенным ниже ссылкам вы найдете дополнительные материалы о поиске файлов в консоли Linux:

Источник

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Рекурсивно найти слово в файлах и папках Linux

Великая сила grep

2 минуты чтения

Дистрибутив Linux, несмотря на версию и вид, имеет множество графических оболочек, которые позволяют искать файлы. Большинство из их них позволяют искать сами файлы, но, к сожалению, они редко позволяют искать по содержимому. А особенно рекурсивно. В статье покажем два способа того, как можно рекурсивно найти файлы, которые содержат ту или иную фразу. Поиск будет осуществлен по папкам и директориям внутри этих папок.

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

Найти фразу в файлах рекурсивно через консоль

Все просто. Открываем серверную консоль, подключившись по SSH. А далее, вводим команду:

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

Команда найдет и выведет все файлы, которые содержат фразу merionet в директории /home/user/merion и во всех директориях, внутри этой папки. Мы используем следующие ключи:

  • -i — игнорировать регистра текста (большие или маленькие буквы);
  • -R — рекурсивно искать файлы в сабдиректориях;
  • -I — показывать названия файлов, вместо их содержимого;

Так же, вам могут быть полезны следующие ключи:

  • -n — показать номер строки, в которой находится фраза;
  • -w — показать место, где слово попадается;

Поиск слова через Midnight Commander

Так же, в консоли сервера, дайте команду:

Эта команда запустит Midnight Commander. Кстати, если он у вас не установлен, его можно просто установить через yum:

Открыв mc, во вкладке Command выберите Find File и заполните поисковую форму как показано ниже:

  • Start at: — директория, где нужно осуществлять поиск;
  • File name: — маска поиска. Например, искать только в файлах расширения txt будет — *.txt;
  • Content — сама фраза;

Нажимаем OK и получаем результат:

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

Источник

Поиск в Linux с помощью команды find

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Читайте также:  Бесконечно устанавливается windows 10

Общий синтаксис

путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <> \; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

Поиск файла по имени

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий.

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» <> \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm <> \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv <> new_name \;

find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 <> \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

Команду find удобно использовать для автоматического удаления устаревших файлов.

Открываем на редактирование задания cron:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Источник

Читайте также:  Linux папка для логов
Оцените статью