3 неочевидных способа поиска текста в Ubuntu, которые сэкономили мне неделю

«Почему в 2024 году поиск по файлам всё ещё вызывает головную боль?» — именно этот вопрос заставил меня перепробовать все методы поиска текста в Ubuntu. Я работаю с огромным количеством данных: конфиги, логи, PDF-документы — всё это хранится в разных директориях и форматах. Стандартные инструменты вроде Nautilus часто подводили: поиск занимал больше времени, чем сама работа. Я решил разобраться, как автоматизировать рутину и найти потерянный конфиг среди 20ГБ логов. Стоит обратить внимание на https://comphobby.ru/2011/01/07/ubuntu-poisk-teksta-v-fajlax/ — это один из тех ресурсов, который помог мне начать. Но сегодня я расскажу о трёх неочевидных способах, которые сэкономили мне неделю работы.

Как я искал старый пароль в 5000 файлах конфигов

Когда я впервые увидел 2000 строк вывода grep, то понял, что делаю что-то не так. Я пытался найти старый пароль в конфигах, но grep –exclude-dir=.git не сработал как надо. Оказалось, что некоторые файлы были скрыты или находились во вложенных директориях. Тогда я открыл для себя комбинацию ripgrep и fzf.

Ripgrep оказался быстрее grep, особенно при работе с бинарными файлами. Он игнорирует их автоматически, что экономит время. А fzf ускорил просмотр результатов в 10 раз. Вместо того чтобы пролистывать километры текста, я просто вводил ключевое слово и мгновенно получал нужный результат.

Комбинация терминальных инструментов — это не просто модно, это реально работает.

Одна из ключевых команд, которая мне помогла, выглядела так:

rg "ключевое слово" --hidden --glob "*.conf" | fzf

Где --hidden искал в скрытых файлах, а --glob "*.conf" ограничивал поиск только конфигурационными файлами. Дополнительно я настроил fzf так, чтобы он подсвечивал найденные фрагменты текста, что сделало просмотр ещё удобнее.

Использование ripgrep также позволило мне обнаружить, что в некоторых файлах текст был разбит на несколько строк. Для этого я использовал флаг -C 3, который показывал три строки до и после найденного фрагмента. Это спасло меня от многочасовой рутины.

Графический поиск, который не стыдно использовать в 2024

После 5 лет работы в терминале я вдруг понял, что иногда GUI всё-таки нужен. Recoll стал для меня настоящим открытием. Этот инструмент индексирует файлы и позволяет искать внутри них, включая PDF. Но настроить индексацию без нагрузки на SSD было непросто.

Я установил Recoll так, чтобы он индексировал только определённые директории и работал в фоновом режиме. Теперь поиск внутри PDF занимает секунды. А ещё Recoll нашёл договор 2018 года, пока я пил чай — это стоило 20 минут настройки.

Для оптимизации работы Recoll я использовал следующие параметры:

  • indexfilenames=1 — индексация только имён файлов для экономии места.
  • indexstemming=0 — отключение анализа корней слов, чтобы ускорить поиск.
  • indexpdfmeta=1 — индексация метаданных в PDF, что особенно полезно для документов.

Я также настроил Recoll так, чтобы он игнорировал временные файлы и директории, такие как /tmp и .cache. Это уменьшило нагрузку на SSD и ускорило процесс индексации.

Один из самых полезных примеров использования Recoll — это поиск внутри ZIP-архивов. Я смог быстро найти нужный файл, не распаковывая архив вручную. Это сэкономило мне несколько часов работы.

Скрипт за 15 минут, который заменил мне утренний кофе

Как-то утром я понял, что трачу слишком много времени на поиск изменённых за неделю файлов. Тогда я написал простой скпт на bash, который делает это за меня. Использовал watch и grep — это мой новый фаворит.

Скрипт проверяет директорию каждые 5 минут и выводит изменения в терминал. Теперь я могу спокойно пить кофе, пока скрипт ищет нужные файлы. Храню его в ~/scripts, чтобы он не потерялся.

Сам скрипт выглядит следующим образом:

#!/bin/bash
watch -n 300 "find /path/to/dir -mtime -7 -type f | grep 'pattern'"

Здесь -mtime -7 ищет файлы, изменённые за последние 7 дней, а grep 'pattern' фильтрует результаты по ключевому слову. Я также добавил логирование, чтобы сохранять результаты поиска в файл:

watch -n 300 "find /path/to/dir -mtime -7 -type f | grep 'pattern' >> ~/search.log"

Этот скрипт стал для меня настоящим спасением, особенно когда нужно было быстро найти последние изменения в проекте.

Ошибки, из-за которых я потратил 3 часа впустую

Кодировка Windows — главный враг поиска в Ubuntu. Однажды я три часа искал текст, который оказался в файле с другой кодировкой. Теперь я всегда проверяю locale перед началом работы.

Ещё одна ошибка — доверие поиску в IDE без проверки. Иногда редакторы игнорируют часть файлов или не находят текст из-за внутренних настроек. Теперь я всегда дублирую поиск через терминал.

Ещё одна распространённая ошибка — это поиск без учёта регистра. Например, команда grep "keyword" пропустит KeyWord или KEYWORD. Я начал использовать grep -i для игнорирования регистра, что значительно повысило точность поиска.

Один из самых неприятных случаев — это поиск в файлах с бинарными данными. Например, некоторые текстовые файлы могут содержать невидимые символы, которые нарушают поиск. Для таких случаев я использую команду strings, которая извлекает только текстовые данные из файла:

strings filename | grep "keyword"

Этот подход помог мне избежать множества ошибок и сэкономить массу времени.

WhatsApp chat