Одной из типичных задач системного администрирования является обнаружение файлов на вашем компьютере. Данное задание обладает своей сложностью. Это связано с тем, что поиск может осуществляться не только по имени, но также по множеству других характеристик файла: таких как размер, владелец, дата создания или изменения, и многим другим. Более того, поисковый процесс может охватывать как отдельный каталог или вложенные папки, так и директории в разных ветвях файловой структуры.
Чтобы приступить к поиску файлов, нужно ответить на два вопроса: что именно искать и где искать. На вопрос "что искать" мы отвечаем, указывая атрибут, по которому будет осуществляться поиск, и его конкретное значение или диапазон значений. К примеру, чтобы найти файлы определенного размера, можно сформулировать запрос следующим образом: "найти файлы, чьи размеры превышают 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 только в домашнем каталоге, без захода в его вложенные папки.