Как использовать fd на Linux и macOS

Что такое fd
fd — это современная и упрощённая альтернатива утилите find. Короткий и предсказуемый синтаксис делает команды короче и легче для запоминания. fd оптимизирован для поиска по шаблонам и по умолчанию игнорирует регистр (если в шаблоне нет заглавной буквы). Кратко:
- fd — быстрый поиск файлов и директорий по имени и пути.
- Совместим по идеям с find, но с более дружелюбным UX.
- Поддерживает подстановки для передачи найденных файлов в другие программы.
Установка fd
fd обычно не предустановлен в системах. Установите пакет через ваш менеджер пакетов.
Ubuntu и Debian-подобные дистрибутивы
Если у вас современная Ubuntu или Debian, лучше ставить пакет из репозитория:
sudo apt-get update
sudo apt-get install fd-findНа старых системах можно скачать релиз с GitHub и установить вручную (пример для amd64):
wget https://github.com/sharkdp/fd/releases/download/v7.3.0/fd-musl_7.3.0_amd64.deb
sudo dpkg -i fd-musl_7.3.0_amd64.debЕсли нужна 32‑битная сборка или другая версия — скачайте нужный пакет на странице релизов fd.
Fedora
sudo dnf install fd-findArch Linux
sudo pacman -S fdGentoo
emerge -av fdmacOS
Через Homebrew:
brew install fdБазовый синтаксис
fd использует простую структуру fd [опции] шаблон [директория].
- Поиск по имени в текущей директории:
fd filename- Поиск в конкретной директории:
fd filename /path/to/searchfd по умолчанию рекурсивно проходит по поддиректориям.
Передача результатов в другие команды
fd поддерживает выполнение команд над найденными файлами через флаг -x и позволяет использовать специальные заполнители:
{}— полный путь к найденному файлу (напримерfiles/images/portrait.jpg).{/}— только имя файла (basename) (portrait.jpg).{//}— путь к родительской директории (files/images).{.}— путь без расширения (files/images/portrait).{/.}— имя файла без расширения (portrait).
Пример: распаковка всех zip-файлов в текущей директории:
fd -e zip -x unzip {}Пример использования нескольких заполнителей и внешней команды (конвертация FLAC в Opus):
fd -e flac -x ffmpeg -i {} -c:a libopus {.}.opusЗдесь {} подставляет полный путь к найденному .flac-файлу, а {.}.opus создаёт новый файл с тем же именем и расширением .opus.
Важно: при сложных командах учитывайте экранирование и порядок аргументов. Если команда должна получить сразу много файлов, используйте -X вместо -x — -X собирает все найденные пути и передаёт их одной командe.
Полезные флаги fd
-e— искать файлы с указанным расширением (без точки), например-e md.-E— исключить результаты, соответствующие шаблону.--changed-newer-than— показать файлы изменённые позже указанной даты или в течение указанного периода (10h,1d,35minили точная строка"YYYY-MM-DD HH:MM:SS").--changed-older-than— противоположность предыдущего, показать более старые файлы.-t— фильтр по типу:-tf(файлы),-td(директории),-tx(исполняемые),-tl(символьные ссылки),-te(пустые файлы).-p— искать по всему пути (pathname), а не только по имени файла.-s— чувствительность к регистру (по умолчанию fd нечувствителен к регистру, пока в шаблоне нет заглавной буквы).-H— показывать скрытые файлы и директории.-L— следовать символическим ссылкам (аналогично find -L).-x— выполнить команду для каждого найденного файла.-X— передать все найденные пути как аргументы одной команды.
Частые примеры и эквиваленты find
- Найти все файлы .log в текущей директории:
fd -e log- Эквивалент find (по имени, нечувствительно к регистру):
find . -iname "*.log"- Исключить папку vendor и искать только в путях:
fd -p -E vendor searchterm- Найти и удалить все файлы временных бэкапов (например
*.bak):
fd -e bak -X rm -fКогда fd не подходит (ограничения и кейсы)
- find остаётся предпочтительным, если нужны очень сложные условия поиска (многоуровневые -exec с логикой или специфичные временные фильтры). fd фокусируется на простоте.
- В сценариях, где скрипты полагаются на точный формат вывода find, миграция требует тестирования.
- Для специфичных опций файловых систем (например, ACL, определённые атрибуты) find может предоставлять больше возможностей.
Миграция с find на fd — практическая методика
- Пройтись по критическим скриптам и отметить вызовы find.
- Для каждого вызова написать эквивалент fd и сравнить результаты в контрольной директории.
- Тестировать на производительность и корректность (учёт ссылок, скрытых файлов, регистрозависимости).
- Если скрипт использует сложные конструкты find (комплексные -exec или -printf), оставьте find или перепишите часть логики на небольшой скрипт, принимающий пути от fd через
-X.
Мини-методология: начать с негруппового перехода — менять по одному сценарию и запускать интеграционные тесты.
Шпаргалка для повседневного использования
- Быстрый поиск по имени:
fd имя - Поиск по расширению:
fd -e js - Только директории:
fd -td - Исключить папки:
fd -E node_modules - Передать файлы в команду:
fd -x command {}или собрать все и передать разом:fd -X command - Чувствительность к регистру: добавьте
-s
Рекомендации для разных ролей
- Разработчик: используйте
fd -pчтобы быстро находить упоминания в путях, комбинируйте сxargsили-Xдля массовых операций. - Системный администратор: используйте
-Lдля обхода символических ссылок и--changed-newer-thanдля поиска недавно изменённых конфигураций. - Тестировщик: при миграции скриптов делайте контрольные прогоны и сохраняйте журналы вывода
fdиfindдля сравнения.
Критерии приёмки (как проверить корректность использования fd)
- Результаты fd соответствуют ожиданиям для выбранного шаблона и опций на контрольном наборе директорий.
- Скрипты, заменённые с find на fd, проходят все тесты CI без регресса.
- Производительность на реальных данных не хуже прежней (или удовлетворяет требованиям SLA).
Тесты и критерии успешного перехода
- Функциональный тест: одинаковые наборы файлов должны быть найдены и fd, и find (для простых шаблонов).
- Интеграционный тест: все сценарии, где применялся find, работают с fd в CI.
- Отказоустойчивость: команды, использующие
-Xи-x, корректно обрабатывают имена с пробелами и спецсимволами.
Примеры реальных команд
- Поиск всех исполняемых файлов и вывод путей:
fd -tx- Все скрытые файлы с расширением .env:
fd -H -e env- Найти файлы модифицированные за последние 24 часа:
fd --changed-newer-than 1dПолезные советы и подводные камни
- fd по умолчанию игнорирует файлы из .gitignore. Если нужно включить их, добавьте
-Hи-I(рекомендуется читать документацию для версии fd в вашей системе). - При передаче большого числа файлов используйте
-Xилиxargs -0для избежания проблем с длинной командной строки. - Всегда тестируйте операции удаления на тестовой директории перед запуском в проде.
Краткая сводка
fd — удобный инструмент для интерактивного и скриптового быстрого поиска файлов. Он проще в использовании, чем find, но в некоторых сложных сценариях find остаётся незаменимым. При миграции из find на fd следуйте методике постепенного перехода и проверяйте результаты в тестах.

Заметки:
- Важно: всегда проверяйте команды удаления и массового изменения на не критичных данных.
- Совместимость: у разных дистрибутивов могут быть разные имена пакетов (fd, fd-find). Проверьте менеджер пакетов вашей системы.
Конец. Попробуйте fd в своей рабочей среде — он часто ускоряет рутинные поисковые операции и делает команды короче.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента