Як використовувати команду fd в Linux

У світі Linux, інструмент fd виступає як більш легка та інтуїтивно зрозуміла альтернатива команді find. Він вирізняється спрощеним синтаксисом, застосовує продумані значення за замовчуванням та вбудовану логіку, що робить його використання зручнішим. Давайте розглянемо його можливості детальніше.

fd проти find: Ключові відмінності

Команда fd не претендує на повну заміну традиційній команді find, яка є невід’ємною частиною Linux вже довгий час. Натомість, fd прагне забезпечити більш простий спосіб виконання більшості типових завдань пошуку, які зазвичай виконує find, і часто демонструє значно вищу швидкість – в 8-9 разів. Переглянути результати тестів продуктивності можна на сторінці проєкту на GitHub.

fd виводить результати з використанням кольорового форматування, подібно до деяких режимів команди ls. Він за замовчуванням рекурсивно сканує каталоги, але не включає приховані директорії до пошуку. Він також враховує конфігурацію Git і автоматично ігнорує шаблони, зазначені у вашому файлі .gitignore.

Пошук fd за замовчуванням не є чутливим до регістру. Однак, якщо ваш шаблон пошуку містить велику літеру, fd переходить в режим пошуку з урахуванням регістру. Хоча ці значення можна змінити, в багатьох випадках вони працюють на користь користувача.

Процес встановлення fd

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

Введіть наступну команду:

sudo apt-get install fd-find

В Ubuntu, команда має назву fdfind, щоб уникнути конфлікту імен з іншою утилітою. Якщо ви хочете використовувати ім’я fd, ви можете створити псевдонім:

alias fd=fdfind

Щоб зробити псевдонім постійним, щоб він залишався активним після перезавантаження, додайте його до вашого файлу .bashrc або .bash_aliases.

Для встановлення fd на Fedora, скористайтеся наступною командою:

sudo dfn install fd-find

На Manjaro введіть:

sudo pacman -Syu fd

fd проти fdfind

Для уникнення плутанини, ми будемо використовувати назву команди за замовчуванням – fdfind – на нашому тестовому комп’ютері з Ubuntu. fd та fdfind є ідентичними командами, як ви побачите у прикладі нижче (якщо ви запитаєте версію fdfind, вона назве себе “fd”):

fdfind --version

Для зручності, ми будемо називати команду “fd”, але у прикладах будемо використовувати fdfind на Ubuntu. В інших дистрибутивах Linux ви можете вводити “fd” замість “fdfind”, щоб заощадити трохи часу.

Простий пошук з fd

Якщо ви використовуєте fd без додаткових параметрів, він працює подібно до ls, але за замовчуванням перераховує файли в підкаталогах.

Введіть наступну команду:

fdfind

Результати виводяться різними кольорами, що відображають тип файлу або каталогу.

Для перегляду файлів певного типу, скористайтеся параметром -e (розширення). Зауважте, що крапка (.) перед розширенням не обов’язкова, і пошук не є чутливим до регістру.

Наприклад, ви можете ввести:

fdfind -e png

Тепер у списку лише файли зображень PNG.

Для пошуку конкретного файлу, введіть його назву у командному рядку, наприклад:

fdfind index.page

Файл знайдено у підкаталозі. Нам не потрібно було явно вказувати fd виконувати рекурсивний пошук.

Щоб розпочати пошук у певному каталозі, додайте шлях до нього в командному рядку. Наступна команда почне пошук у директорії /etc та знайде файли, що містять “passwd” у назві:

fdfind passwd /etc

Тут ми шукаємо всі файли вихідного коду C, що містять “coord” у імені файлу:

fdfind -e c coord

Знайдено два відповідних файли.

fd та Git

Git є дуже популярною системою керування версіями. Якщо ви використовуєте Git, ви, ймовірно, маєте файли .gitignore, в яких ви вказуєте Git, які файли потрібно враховувати, а які ігнорувати. За замовчуванням, fd враховує налаштування у ваших .gitignore файлах.

У цьому каталозі ми маємо репозиторій Git та файл .gitignore. Введемо наступну команду:

ls -adl .git*

Тепер давайте попросимо fd вивести всі файли, що містять “coord” у назві. Потім повторимо пошук, використовуючи опцію -I (не ігнорувати). Це змусить fd проігнорувати налаштування у файлі .gitignore та показати кожен відповідний файл.

Щоб виконати це, введіть:

fdfind coord
fdfind coord -I

Два додаткові файли в другому наборі результатів – це об’єктні файли, які генеруються під час компіляції вихідного коду. Вони використовуються компонувальником для створення виконуваного файлу програми.

Об’єктні файли зазвичай ігноруються системами контролю версій. Вони відтворюються кожного разу, коли ви компілюєте програму, тому зберігати їх копії не потрібно. У файлі .gitignore є правило, що каже Git ігнорувати об’єктні файли, і за замовчуванням fd також їх ігнорує.

Параметр -I (не ігнорувати) змушує fd повертати все знайдене, незалежно від налаштувань .gitignore.

Типи файлів та чутливість до регістру

Ви можете вказати fd шукати каталоги, файли (включаючи виконувані та пусті), та символічні посилання. Це можна зробити за допомогою параметра -t (тип), а потім однієї з наступних літер:

f: файл.
d: каталог.
l: символічне посилання.
x: виконуваний файл.
e: порожній файл.

Наприклад, ось команда для пошуку каталогу з назвою “images”:

fdfind -td images

Знайдено відповідність, на один рівень під поточним каталогом.

Розглянемо, як працює чутливість до регістру при пошуку. Спочатку введемо команди для пошуку файлів, що містять “geo” та “Geo” у їхніх назвах:

fdfind -tf geo
fdfind -tf Geo

У першій команді ми використали шаблон пошуку в нижньому регістрі, що змусило fd виконувати пошук без урахування регістру. Тобто і “Geo”, і “geo” є дійсними збігами.

Наша друга команда містила символ у верхньому регістрі, що змусило fd проводити пошук з урахуванням регістру. Це означає, що лише “Geo” вважається дійсним збігом.

Виконання команди

Команда fd дозволяє вам запустити іншу команду та виконати її для кожного знайденого файлу.

Припустимо, що десь у нашому дереві каталогів є ZIP-архів. Ми можемо знайти його за допомогою наступної команди, яка шукає файли з розширенням ZIP:

fdfinf -e zip

За допомогою параметра -x (exec) ви можете передати кожен знайдений файл іншій команді для обробки. Наприклад, ми можемо ввести наступне, щоб запустити утиліту unzip для розпакування нашого ZIP-архіву (“{}” – це заповнювач, який представляє знайдений файл):

fdfind -e zip -x unzip {}

Це розпакує архів у поточному робочому каталозі. Якщо ми хочемо розпакувати його в каталог, де знаходиться ZIP-файл, ми можемо використати один із таких заповнювачів:

{}: повний шлях та ім’я знайденого файлу.
{/}: ім’я знайденого файлу.
{//}: каталог, де знаходиться знайдений файл.
{/.}: ім’я знайденого файлу без розширення.

Щоб наш ZIP-архів було знайдено та розпаковано в каталог, де він знаходиться, ми можемо використати параметр unzip -d (каталог) та передати заповнювач батьківського каталогу ({//}):

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

У результаті, ZIP-архів буде знайдено та розпаковано у батьківському каталозі.

Чи fd стане вашим інструментом для пошуку?

Завдяки своїй простоті та ефективності у вирішенні більшості типових задач пошуку, fd може легко стати вашою основною командою для пошуку. Якщо вам знадобляться розширені можливості, ви завжди можете повернутися до перевіреної часом команди find.