Многие системные администраторы и разработчики сталкивались с необходимостью быстрого и эффективного поиска файлов в операционных системах на базе Linux. Классическая утилита find, несмотря на свою мощность и гибкость, часто вызывает затруднения из-за сложного синтаксиса, обилия опций и необходимости постоянного экранирования символов. Это приводит к потере времени на поиск нужных команд или повторное изучение документации даже для простых задач.

Представляем fd — современную, интуитивно понятную и значительно более быструю альтернативу find, написанную на языке Rust. Эта утилита разработана для упрощения повседневных задач поиска файлов, предлагая удобный синтаксис, оптимизированную производительность и интеллектуальные настройки по умолчанию, которые значительно улучшают пользовательский опыт.

Преимущества fd перед find

fd спроектирована с учётом современных требований к инструментам командной строки:

  • Интуитивный синтаксис: Больше не нужно запоминать сложные ключи. Для базового рекурсивного поиска по имени достаточно указать fd <шаблон>.
  • Высокая скорость работы: Благодаря параллельному обходу файловой системы и игнорированию служебных каталогов (таких как .git/) и скрытых файлов по умолчанию, fd демонстрирует значительно лучшую производительность.
  • Разумные настройки по умолчанию: Утилита автоматически игнорирует скрытые файлы и каталоги, а также файлы, указанные в .gitignore, что исключает из выдачи ненужные результаты и делает её более чистой.
  • Цветной и читаемый вывод: Результаты поиска отображаются с использованием цветов, что значительно улучшает их восприятие. При наличии соответствующих шрифтов могут использоваться иконки.
  • Гибкость: Поддерживает регулярные выражения, glob-шаблоны и позволяет выполнять внешние команды с найденными файлами.

Установка fd

fd легко устанавливается на большинство популярных операционных систем.

Для Ubuntu/Debian

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

sudo apt install fd-find

Для получения самой актуальной версии рекомендуется загрузить пакет .deb с официального репозитория GitHub:

wget https://github.com/sharkdp/fd/releases/latest/download/fd-musl_9.0.0_amd64.deb
sudo dpkg -i fd-*.deb

Для Arch Linux

sudo pacman -S fd

Для macOS

brew install fd

Если после установки команда fd не доступна напрямую и называется fdfind, вы можете создать алиас для удобства:

alias fd=fdfind

Базовое использование

Примеры показывают простоту использования fd в сравнении с find.

Поиск файлов по расширению

Найти все файлы с расширением .conf в текущем каталоге и его подкаталогах:

fd .conf

Поиск по имени в корневой файловой системе

Найти все файлы или каталоги, начинающиеся на «nginx», во всей системе (могут потребоваться права суперпользователя):

sudo fd nginx /

Поиск только каталогов

Найти только каталоги с именем «logs»:

fd --type d logs

Поиск файлов, изменённых за определённый период

Найти все файлы, изменённые за последние 24 часа:

fd --changed-within 24h

Ключевые особенности fd

1. Интеллектуальное игнорирование ненужных элементов по умолчанию

fd автоматически исключает из поиска каталоги, такие как .git/, не показывает скрытые файлы (начинающиеся с точки) и игнорирует бинарные файлы, если не указано иное. Это значительно сокращает объем выдачи и упрощает поиск целевых файлов. Для включения скрытых файлов в поиск используйте опцию -H:

fd -H pattern

2. Выполнение команд для каждого найденного файла

Как и find с опцией -exec, fd позволяет выполнять внешние команды. Однако fd предлагает более удобный синтаксис и два режима выполнения:

  • -X (или --exec-batch): Собирает все найденные результаты и передаёт их одной команде в виде аргументов. Это эффективно для команд, которые могут обрабатывать несколько файлов за раз.
  • -x (или --exec): Выполняет команду для каждого найденного файла отдельно.

Пример: Удаление всех файлов с расширением .tmp с подтверждением:

fd -e tmp -X rm -v

3. Поиск и замена в файлах одной командой

fd в сочетании с sed позволяет выполнять операции поиска и замены содержимого файлов по всему проекту:

fd -e conf -x sed -i 's/localhost/127.0.0.1/g' {}

Эта команда найдёт все файлы .conf и заменит каждое вхождение «localhost» на «127.0.0.1» непосредственно в этих файлах.

4. Шаблоны поиска, как в современных IDE

fd позволяет использовать гибкие шаблоны поиска, включая возможность исключения определённых каталогов из поиска, что особенно полезно в крупных проектах:

fd database --exclude target

Эта команда найдёт все файлы, содержащие «database» в имени, но полностью исключит из поиска папку target.

Когда использовать fd, а когда find?

  • fd: Идеально подходит для повседневного, интерактивного поиска файлов, где важны скорость, простота и читаемый вывод. Отлично подходит для большинства задач системного администрирования и разработки.
  • find: Остаётся незаменимым, когда требуется очень специфичный синтаксис, детальный поиск по времени модификации, правам доступа, или в скриптах, где приоритет отдаётся максимальной переносимости (хотя fd также можно успешно интегрировать в скрипты).

Заключение

fd кардинально упрощает процесс поиска файлов в командной строке, превращая некогда рутинную и порой сложную задачу в быстрый и приятный опыт. Её интуитивный синтаксис, высокая производительность и умные настройки по умолчанию делают её незаменимым инструментом для любого, кто регулярно работает с файловой системой Linux. Если вы ещё не пробовали fd, самое время интегрировать её в свой рабочий процесс.