Как использовать команду fd в Linux

В Linux fd — более простая альтернатива команде find. Он имеет упрощенный синтаксис, использует разумные значения по умолчанию и имеет встроенное поведение, основанное на здравом смысле. Давайте разберемся с этим.

fd против find: в чем разница?

ФД команда не предназначена для замены традиционная команда поиска, которая имеет был в Linux, ну, навсегда. Вместо этого fd пытается удовлетворить большинство распространенных применений find более простым способом — и часто это в восемь или девять раз быстрее, чем find. Вы можете увидеть некоторые из его тестов на странице проекта. Страница репозитория GitHub.

fd имеет цветной вывод, аналогичный таковому в некоторых режимах ls. Он рекурсивен, но по умолчанию не выполняет поиск в скрытых каталогах. Он знает о Git а также автоматически игнорирует любые шаблоны в вашем файле «.gitignore».

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

Установка fd

Начиная с Ubuntu 19.04 (Disco Dingo), вы можете установить fd напрямую, вызвав официально поддерживаемый пакет с помощью apt-get. Если вы используете более старую версию Ubuntu, проверьте инструкции по установке на странице Git Hub.

Введите следующее:

sudo apt-get install fd-find

sudo apt-get install fd-find в окне терминала.

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

alias fd=fdfind

псевдоним fd = fdfind в окне терминала.

Чтобы псевдоним был постоянным и оставался доступным после перезагрузки, поместите его в файл «.bashrc» или «.bash_aliases».

  Как получить спецификации системы для ПК с Linux

Чтобы установить fd в Fedora, введите эту команду:

sudo dfn install fd-find

sudo dnf install fd-find в окне терминала.

В Manjaro введите следующее:

sudo pacman -Syu fd

sudo pacman -Syu fd в окне терминала.

fd против fdfind

Чтобы избежать путаницы, мы оставили команду с именем по умолчанию, fdfind, на нашем тестовом ПК с Ubuntu. fd и fdfind — это одна и та же команда, как вы увидите в следующем примере (если вы попросите fdfind показать свою версию, она назовет себя «fd»):

fdfind --version

fdfind --version в окне терминала.

Мы назовем команду «fed», но в примерах мы будем использовать Ubuntu «fdfind». В других дистрибутивах Linux вы можете набрать «fd» вместо «fdfind», чтобы сэкономить несколько нажатий клавиш.

Простой поиск с помощью fd

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

Введите следующее:

fdfind

fdfind в окне терминала.

Выходные данные отображаются разными цветами для разных типов файлов и каталогов.

Вывод из fdfind в окне терминала.

Чтобы просмотреть файлы определенного типа, используйте параметр -e (расширение). Обратите внимание, что вам не обязательно ставить перед расширением точку (.) И не учитывать регистр.

Например, вы можете ввести следующее:

fdfind -e png

fdfind -e png в окне терминала.

Теперь в списке перечислены только файлы изображений PNG.

вывод команды fdfind -e png в окне терминала.

Чтобы найти один файл, введите его имя в командной строке, например:

fdfind index.page

fdfind index.page в окне терминала.

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

Чтобы поиск запускался в определенном каталоге, укажите путь к файлу в командной строке. Следующая команда запустит поиск в каталоге «/ etc» и найдет файлы, которые содержат «passwd» в имени файла:

fdfind passwd /etc

fdfind passwd / etc в окне терминала.

Здесь мы ищем все файлы исходного кода C, которые содержат «координату» в имени файла:

fdfind -e c coord

fdfind -ecordin в окне терминала.

Найдено два совпадающих файла.

  Как играть в серию игр Bungie Marathon в Linux

fd и Git

Git — чрезвычайно популярный система контроля версий исходного кода. Если вы используете Git на своем компьютере, вы, вероятно, используете файлы «.gitignore», чтобы указать Git, с какими файлами он должен работать, а какие можно игнорировать. По умолчанию fd соблюдает настройки в ваших файлах «.gitignore».

В этом каталоге у нас есть репозиторий Git и файл «.gitignore». Набираем следующее:

ls -adl .git*

ls -adl .git * в окне терминала.

Давайте попросим fd перечислить все файлы, которые содержат «координату» в имени файла. Затем мы повторим поиск и воспользуемся параметром -I (без игнорирования). Это указывает fd игнорировать настройки в файле «.gitignore» и сообщать обо всех совпадающих файлах.

Для всего этого мы набираем следующее:

fdfind coord
fdfind coord -I

fdfind координаты в окне терминала.

Два дополнительных файла во втором наборе результатов — это объектные файлы. Они создаются при компиляции файловой программы. Затем они используются компоновщиком для создания окончательной исполняемой версии программы.

Объектные файлы обычно игнорируются программами контроля версий исходного кода. Они восстанавливаются каждый раз, когда вы компилируете свою программу, поэтому вам не нужно хранить их копии. В файле «.gitignore» есть запись, которая инструктирует Git игнорировать объектные файлы, и, по умолчанию, fd также игнорирует их.

Параметр -I (без игнорирования) заставляет fd возвращать все, что он находит, вместо того, чтобы руководствоваться файлом «.gitginore».

Типы файлов и чувствительность к регистру

Вы можете попросить fd искать каталоги, файлы (включая исполняемые и пустые) и символические ссылки. Вы можете сделать это, используя параметр -t (тип), за которым следует одна из букв ниже:

f: Файл.
d: Справочник.
l: символическая ссылка.
x: Исполняемый файл.
e: пустой файл.

Следующее ищет каталог с именем images:

fdfind -td images

fdfind -td изображения в окне терминала.

Найдено совпадение, на один подкаталог ниже текущего.

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

fdfind -tf geo
fdfind -tf Geo

fdfind -tf geo в окне терминала.

В первой команде мы использовали шаблон поиска в нижнем регистре, который заставлял fd работать без учета регистра. Это означает, что и «Geo», и «geo» являются допустимыми совпадениями.

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

Наша вторая команда содержала символ верхнего регистра, что заставляло fd работать с учетом регистра. Это означает, что допустимым соответствием является только «Geo».

Выполнение команды

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

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

fdfinf -e zip

fdfinf -e zip в окне терминала.

С параметром -x (exec) вы можете передать каждый найденный файл другой команде для обработки. Например, мы можем ввести следующее, чтобы вызвать утилита распаковки для распаковки нашего ZIP-файла («{}» — это заполнитель, представляющий найденный файл):

fdfind -e zip -x unzip {}

Это распакует файл в текущем рабочем каталоге. Если мы хотим, чтобы он был распакован в каталог, содержащий ZIP-файл, мы можем использовать один из следующих заполнителей:

{}: Полный путь к файлу и имя найденного файла.
{/}: Имя найденного файла.
{//}: каталог, содержащий найденный файл.
{/.}: Имя найденного файла без расширения.

Чтобы наш ZIP-файл был найден и распакован в каталоге, который его содержит, мы можем использовать параметр unzip -d (directory) и передать заполнитель родительского каталога ({//}):

fdfind -e zip -x unzip {} -d {//}

fdfind-e zip -x unzip {} -d {//} в окне терминала.

Затем ZIP-файл находится и распаковывается в его родительский каталог.

Вывод из fdfind-e zip -x unzip {} -d {//} в окне терминала.

Ваша находка?

Так как он с такой простотой охватывает наиболее распространенные применения, fd может легко стать вашей «поисковой» командой. Когда вам понадобятся его более продвинутые функции, вы всегда можете вернуться к тому опытному ветерану, найти.