Поиск файлов. Команда find

Одной из частых задач администрирования является поиск файлов на компьютере. Данная задача не так проста. Ведь поиск может производиться не только по имени, но и по множеству других свойств файла: размеру, владельцу, времени создания или изменения и др. Также искать можно в одном каталоге, во вложенных папках, в директориях, находящихся в разных ветвях дерева каталогов.

Таким образом, прежде чем выполнять поиск файлов, надо ответить на два вопроса: что искать и где искать. Отвечая на вопрос "что искать" мы должны указать свойство, по которому выполняется поиск, и его значение или диапазон значений. Пусть требуется найти файлы определенного размера, тогда запрос может быть сформулирован так: "найти файлы, размер которых больше 100 мегабайт".

Запрос может быть более сложным, предполагать поиск сразу по нескольким свойствам. Например, надо найти файлы с определенным расширением, созданные за два последних дня.

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

Отсюда следует, что в формуле "где искать + что искать" может быть третья составляющая – "что делать с найденным".

В командной оболочке Unix-подобных операционных систем для поиска используется программа, или утилита, find. С ее помощью можно гибко настроить критерии поиска, при необходимости выполнить какое-либо действие с найденными объектами. Понятно, что синтаксис команды find сложен, используется множество ключей и комбинаций параметров. Здесь мы рассмотрим несколько примеров использования find. Полную информацию можно получить, воспользовавшись справочной системой Linux.

В простом случае команда find имеет такой синтаксис:

find место_поиска ключ-свойство значение_свойства

На скрине место поиска обведено желтой рамкой, пара ключ и значение – оранжевой. В первом случае в каталоге folder ищутся все файлы, которые были изменены (-mtime) за последние 10 дней. Во втором случае файлы ищутся по имени (-name) в текущем каталоге. Имена файлов должны соответствовать шаблону *2*.

Обратите внимание, утилита find не поддерживает "стандарт команд Bash", согласно которому ключи из целого слова, а не одной буквы, должны начинаться с двух знаков минуса. У find они начинаются с одного.

Если нужно указать несколько каталогов или несколько параметров поиска, это делается перечислением.

Здесь в двух каталогах выполняется поиск файлов png, размер которых больше 5 килобайт. Шаблон записан в кавычках, иначе не работает.

Если с найденными файлами надо что-то сделать, используется ключ -exec.

В примере ищутся файлы, оканчивающиеся на txt. Каждый найденный передается команде cp (файл подставляется на место фигурных скобок). Команда cp копирует файл в каталог Загрузки. Конец аргумента exec обозначается обратным слэшем и точкой с запятой.

Задание

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

Курс с ответами к заданиям и дополнительными уроками в PDF


Введение в Linux и Bash. Курс




Все разделы сайта