Catfish. Утилита поиска файлов

Алексей Федорчук
25 августа 2008 г

Графическая утилита поиска файлов.

Секция 1. Характеристика Catfish

  • Наименование: catfish
  • Категория: xap
  • Группа: инструменты
  • Назначение: оболочка для утилит поиска файлов
  • Описание: выступает как графический фронт-энд (основанный на GTK+) для различных движков поиска файлов; интерфейс предельно облегчённый, варианты конфигурации берутся из командной строки; в качестве бэк-эндов поддерживаются find, locate и slocate, tracker, strigi, beagle и doodle
  • Команда: Кристиан Дайван (Christian Dywan) — автор, Фред Галузик (Fred Galusik) — майнтайнер
  • Сфера применения: поиск пользовательских файлов, исполняемых команд и т.д.
  • Потенциальные пользователи: все, нуждающиеся в поиске файлов :)
  • Доступность: имеются deb-пакеты, вероятно, есть и другие

Секция 2. Сочинение на тему Catfish

Название этой программы происходит от рыбы зубатки (catfish по-английски): видимо, подразумевается, что она как вцепится в файл — так ни за что его не выпустит. Хотя у «живой» зубатки зубы предназначены не для хватания, а для перетирания моллюсков.

Как было сказано в 1-й секции, Catfish — это графическая оболочка (фронт-энд) для различных программ, имеющих своим назначением поиск файлов. Программы эти столь же многочисленны, сколь разнообразны виды файлов, относимых в Unix-подобных системах к категории «обычных» (regular). Впрочем, Catfish успешно справляется и с поиском файлов иных типов — каталогов, символических ссылок и файлов устройств (на поиске соккетов и именованных каналов я его не проверял за ненадобностью).

Для того, чтобы программа поиска файлов была задействована Catfish’ем, кроме формальной поддержки, необходимо её наличие в системе. Так, в случае с Zenwalk’ом по умолчанию мы не найдём ни beagle, ни tracker, ни прочих strigi с doodle. Так что всего остаётся три поисковых движка — find, locate и slocate. Впрочем, при ближайшем рассмотрении число их сводится к двум, ибо locate и slocate — один и тот же исполняемый файл, первый из которых представляет собой символическую ссылку на второй, в чём легко убедиться командой

$ ls -l /usr/bin/locate
lrwxrwxrwx 1 root root 7 2008-08-06 23:34 /usr/bin/locate -> slocate*

Пора, однако, начать знакомство с программой Catfish. Запускается она из главного меню (рабочего стола или панели задач): Applications -> Инструменты -> Catfish (в последних на текущий момент снапшотах Zenwalk’а именно так, и скорее всего так будет в грядущем релизе). Кроме того, запуск программы Catfish может осуществляться через пункт File locator выпадающего меню иконки Terminal на Панели задач.

Каким бы образом мы ни запустили Catfish, перед нами предстаёт окно с заголовком вверху и статусной строкой внизу (рис. 1), пространство между которыми разделено на две панели.

catfish01Рис. 1. Catfish — общий вид

С правой панелью всё понятно — в ней мы со временем увидим результаты поиска. А вот с левой панелью давайте разбираться.

Поле ввода, озаглавленное catfish, предназначено для имени искомого файла или его маски: программа понимает регулярные выражения, о чём напоминает чекбокс Exact match непосредственно ниже поля ввода. Далее вниз мы видим чекбоксы Hidden files, включение которого позволяет производить поиск среди dot-файлов, Fulltext search, не активизированный по умолчанию (скоро станет ясно, почему) и Limit results, возволяющий при желании ограничить вывод результатов определённым числом файлов.

Ниже чекбоксов — панелька, озаглавленная File type. Тут нужно учесть, что расположенные на ней пиктограммы (Documents, Images, Music, Videos) — это не типы файлов в понимании Unix (обычные файлы, каталоги, симлинки, файлы устройств и так далее), а их разновидности, определяемые по т.н. «магической последовательности» командой file. Включение одного (или нескольких) типов файлов позволяет сузить круг поиска. Однако надо помнить, что в понятие Documents здесь попадают файлы в формате plain text, html и им подобные, но не документы OpenOffice или, скажем, Microsoft Word: с точки зрения команды file первые выглядят просто как некие абстрактные файлы данных, а doc-файлы, хотя ею и именуются, но никакой иной информации она из них извлечь не в состоянии.

Стоит еще отметить, что программа Catfish, как и практически любой иной фронт-энд, наиболее эффективно работает тогда, когда пользователь понимает смысл действий, стоящих за графическим интерфейсом, и осуществляемых программами — бэк-эндами. В этом мы скоро убедимся, когда дело дойдёт до метода поиска.

А пока у нас на очереди панелька с выпадающим меню Folder (так, под тлетворным влиянием Windows, обзываются каталоги). Назначение его то же,. что и панельки File type — сузить ареал поисков путем исключения из него тех ветвей файлового древа, где искомого файла заведомо не может быть. Ввиду тесной интеграции с файловым менеджером, каковым в нашем случае выступает Thunar, меню это повторяет закладки последнего — три обязательные (домашний каталог, рабочий стол и файловая система в целом), и те, которые были определены пользователем ранее (рис. 2).

catfish02
Рис. 2. Выбор каталога для поиска

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

И, наконец, панелька Search method — также выпадающее меню, в котором выбирается программа, собственно и осуществляющая поиск (рис. 3). По умолчанию это find, но можно переключиться на использование locate или slocate (что, как уже говорилось, на самом деле одно и то же).

catfish03
Рис. 3. Выбор программы поиска

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

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

Команда locate осуществляет поиск всех файлов и каталогов, содержащих компонент имени, указанный в качестве аргумента, и осуществляет вывод содержимого найденных каталогов. Поиск при этом выполняется не в файловом дереве, а в специальной базе данных — в Zenwalk’е это /var/lib/slocate/slocate.db (в других дистрибутивах или ОС она может находиться в иных подкаталогах ветви /var), и потому происходит много быстрее. Разница в скорости поиска между командами find и slocate особенно заметно, если вести его от корневого каталога.

Однако база данных для команды slocate нуждается в пополнении. Это делается с некоторой периодичностью или принудительно — командой /usr/bin/updatedb (от имени суперпользователя). Так что искомого файла в данный момент в базе может не оказаться, и тогда результат поиска этим методом будет отрицательным.

С другой стороны, при выборе метода поиска посредством slocate активизируется опция Fulltext search — правда, в чём выражается её действие, для меня так и осталось загадкой: поиск текстовых фрагментов в файлах я как-то привык выполнять командой grep.

Тем не менее, сказанного выше, думаю, достаточно, чтобы сделать осознанный выбор, каким именно методом поиска следует пользоваться в каждом конкретном случае. Сами же команды find и slocate заслуживают более подробного рассмотрения, каковое не замедлит последовать вскоре.

Catfish. Утилита поиска файлов: 1 комментарий

  1. Привет, не подскажешь shell, который бы умел работать с pcre в файловых масках?
    Либо утилита, которая расширяет csh

Обсуждение закрыто.