Ищите и найдете

Как найти файлы в Linux с помощью Find, Locate и Grep…

Поиск файлов в среде Linux с командной строкой иногда может оказаться нетривиальной задачей особенно при работе с многочисленными каталогами и большими массивами данных.

Однако умение выполнять эти задачи с помощью командной строки Linux приносит огромные дивиденды и позволяет получать отличные результаты при поиске. Это также означает, что задачу легко автоматизировать и сделать ее повторяемой.

Важно помнить, что Linux – это использование правильного инструмента для правильной работы, а также объединение инструментов в цепочки для достижения результата.

К мощным инструментам, которые могут помочь пользователю в поиске файлов, относятся Find, Locate и Grep. Давайте рассмотрим их основы и то, как соединить их в цепочку с помощью пайпов.

Сохраняем с Find

Find – это универсальный инструмент для поиска файлов и каталогов в иерархии по заданным критериям. Он особенно полезен, когда нет уверенности в точном местонахождении файла. Найти все TXT-файлы в текущем каталоге и подкаталогах довольно просто:

$ find . -name "*.txt"

Полезно, но не потрясающе. Дополнительные параметры расширяют его. Ниже приведен полезный пример использования параметров -type и -size. Например, чтобы найти все файлы размером более 10 МБ в каталоге /home/user, используйте:

$ find /home/user -type f -size +10M

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

$ find .txt -type f -size +10M > results.txt 2> /dev/null

Приведенная выше команда помещает все найденные файлы в results.txt и перенаправляет все ошибки в /dev/null.

Locate и смотрите!

В то время как Find осуществляет поиск в файловой системе в реальном времени, Locate использует индекс, что делает его более быстрым, хотя и потенциально устаревшим. Мы признаем, что это один из самых удобных и быстрых способов работы с файлами и один из наших основных способов поиска файлов. Чтобы найти все экземпляры файла с именем notes.txt, используйте:

$ locate notes.txt

Опять же, для тонкой настройки вывода можно использовать некоторые ключи. Чтобы реализовать поиск каталога с именем Projects без учета регистра, используйте:

$ locate -i projects

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

$ locate bin/postgres

Это позволит получить отчет только в том случае, если в каталоге bin имеется файл postgres.

Работа команды Locate зависит от наличия актуальной базы данных. По умолчанию она переиндексируется раз в 24 часа. Можно вручную перезапустить индексацию с помощью команды sudo updatedb . На большинстве систем это займет совсем немного времени.

Ожидания от Grep

В то время как Find и Locate ищут файлы на основе метаданных, Grep ищет внутри файлов определенный шаблон. Это утилита для поиска текста, позволяющая выявить строки в файлах, соответствующие заданному шаблону:

$ grep [options] pattern [file...]

Примером может служить поиск слова “Linux” в файле document.txt:

$ grep “Linux” document.txt

Большинство системных администраторов используют поиск без учета регистра, чтобы убедиться в том, что все случаи (если только это не специфическая заглавная буква) для слова “Linux” во всех TXT-файлах в текущей директории были найдены:

$ grep -i “Linux” *.txt

Grep также может использоваться для рекурсивного поиска слова “Warning” во всех файлах, начиная с текущего каталога:

$ grep -r “Warning” .

Пайпы с горячими командами

Эти команды прекрасны, но если объединить их с другими, то это существенно увеличивает возможности поиска. Конвееры (пайпы), обозначаемые символом |, позволяют брать вывод одной команды и использовать его в качестве ввода для другой. Это позволяет комбинировать возможности различных команд для решения более сложных задач.

$ grep -r “Warning” . | tail -n 5

Использование пайпа для передачи вывода в Tail означает, что будут показаны только последние пять предупреждений, а не все предупреждения в данной папке.

В качестве другого примера, если мы хотим заархивировать найденные файлы, то для этого можно использовать параметр -exec. По умолчанию команда gzip также удаляет оригинал, поэтому действуйте осторожно.

Возвращаясь к команде Find, мы можем использовать пайп для того, чтобы сообщить, что все файлы журналов размером более 10 МБ должны быть обработаны:

$ find -type f -name “*.log” -size +10MB -exec gzip {};

Обратите внимание на новый ключ -exec – он позволяет выполнить команду на выходе. Для поиска файлов размером менее 10 МБ используйте -, чтобы указать “менее”, поэтому можно использовать -10 MBFind также понимает значения MB, GB и KB.

Linux предоставляет богатый набор команд для облегчения задачи поиска файлов. Независимо от того, ищете ли Вы файл по его метаданным с помощью Find или Locate, или же ищете определенный шаблон в файле с помощью Grep, Linux всегда готов помочь. Кроме того, используя возможности пайпов, вы можете комбинировать эти команды различными способами для достижения желаемого результата.

Овладение этими командами крайне важно для тех, кто стремится к профессиональному освоению Linux, поскольку они, несомненно, окажутся незаменимыми при выполнении повседневных задач.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
MasCloud
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: