Jak používat příkaz fd v systému Linux

Photo of author

By etechblogcz

V prostředí Linux je nástroj `fd` elegantní alternativou ke klasickému příkazu `find`. Vyznačuje se přehlednou syntaxí, inteligentními výchozími nastaveními a intuitivním chováním. Pojďme se podívat, jak jej efektivně využít.

Rozdíly mezi `fd` a `find`

Příkaz `fd` si neklade za cíl plně nahradit tradiční příkaz `find`, který je součástí Linuxu již velmi dlouho. Namísto toho se snaží zjednodušit a zrychlit nejběžnější vyhledávací operace. Často je při nich dokonce 8 až 9 krát rychlejší než `find`. Pro srovnání výkonu se můžete podívat na stránku projektu na GitHubu.

`fd` disponuje barevným výstupem, podobně jako některé režimy příkazu `ls`. Prohledává adresáře rekurzivně, ale standardně vynechává skryté složky. Navíc rozumí systému Git a automaticky ignoruje položky uvedené v souboru „.gitignore“.

Ve výchozím stavu `fd` nerozlišuje velikost písmen. Pokud však vyhledávací vzor obsahuje alespoň jedno velké písmeno, `fd` automaticky přepne do režimu rozlišování malých a velkých písmen. Toto výchozí chování lze sice přepsat, v mnoha případech vám ale ušetří práci.

Instalace `fd`

Pro uživatele Ubuntu 19.04 (Disco Dingo) a novějších je instalace `fd` velmi snadná, stačí použít oficiálně spravovaný balíček `apt-get`. Pro starší verze Ubuntu najdete pokyny k instalaci na stránce repozitáře na Gitu.

Zadejte tento příkaz:

sudo apt-get install fd-find

V Ubuntu se příkaz jmenuje `fdfind`, aby nedocházelo ke kolizi s jinými nástroji. Pokud preferujete název `fd`, můžete si vytvořit alias:

alias fd=fdfind

Chcete-li, aby alias zůstal trvalý i po restartu, přidejte jej do souboru „.bashrc“ nebo „.bash_aliases“.

Pro instalaci `fd` na Fedoru použijte tento příkaz:

sudo dfn install fd-find

Na Manjaru provedete instalaci pomocí následujícího příkazu:

sudo pacman -Syu fd

`fd` vs `fdfind`

Abychom zabránili záměně, na testovacím počítači Ubuntu jsme nechali výchozí název příkazu `fdfind`. `fd` a `fdfind` jsou identické příkazy. Jak uvidíte v následujícím příkladu (když se `fdfind` zeptáte na verzi, představí se jako „fd“):

fdfind --version

V dalším textu budeme primárně používat označení „fd“, ale v příkladech pro Ubuntu zůstaneme u `fdfind`. V jiných distribucích Linuxu stačí používat příkaz `fd` a ušetříte pár úhozů.

Základní vyhledávání s `fd`

Pokud spustíte `fd` bez dalších parametrů, chová se podobně jako `ls`, ale s tím rozdílem, že standardně vypisuje soubory i z podadresářů.

Zadejte:

fdfind

Výstup je barevně rozlišen pro různé typy souborů a složek.

Pro zobrazení souborů určitého typu použijte volbu `-e` (přípona). Nemusíte zadávat tečku před příponou a nerozlišuje se velikost písmen.

Například:

fdfind -e png

Nyní jsou vypsány pouze soubory obrázků PNG.

Pro vyhledání konkrétního souboru stačí zadat jeho název:

fdfind index.page

Soubor byl nalezen v podadresáři. `fd` prohledává rekurzivně automaticky.

Pokud chcete vyhledávat od určitého adresáře, zadejte jeho cestu jako argument. Například tento příkaz prohledá adresář „/etc“ a hledá soubory s „passwd“ v názvu:

fdfind passwd /etc

Zde hledáme zdrojové soubory C s „coord“ v názvu:

fdfind -e c coord

Byly nalezeny dva soubory.

`fd` a Git

Git je populární systém pro správu verzí zdrojového kódu. Pokud používáte Git, pravděpodobně máte soubory „.gitignore“, které říkají Gitu, které soubory má ignorovat. Ve výchozím stavu `fd` respektuje toto nastavení.

V tomto adresáři máme Git repozitář a soubor „.gitignore“. Zadáme:

ls -adl .git*

Necháme `fd` vypsat všechny soubory s „coord“ v názvu. Poté zopakujeme hledání s volbou `-I` (no ignore), která ignoruje nastavení v „.gitignore“ a vypíše všechny odpovídající soubory.

Zadáme:

fdfind coord
fdfind coord -I

Dva další soubory v druhém výstupu jsou objektové soubory, které vznikají při kompilaci programu a jsou pak použity linkerem k vytvoření spustitelného souboru.

Objektové soubory jsou verzovacími systémy standardně ignorovány, protože jsou vytvářeny při každé kompilaci programu. V souboru „.gitignore“ je proto definováno pravidlo pro jejich ignorování a `fd` se chová stejně.

Volba `-I` (no ignore) donutí `fd` vypsat vše bez ohledu na nastavení v „.gitignore“.

Typy souborů a rozlišování velikosti písmen

Pomocí `fd` můžete vyhledávat adresáře, soubory (včetně spustitelných a prázdných) a symbolické odkazy. Použijte k tomu volbu `-t` (typ) následovanou jedním z písmen:

f: Soubor.
d: Adresář.
l: Symbolický odkaz.
x: Spustitelný soubor.
e: Prázdný soubor.

Následující příkaz hledá adresář s názvem „images“:

fdfind -td images

Byla nalezena shoda o jeden podadresář níže.

Podívejme se, jak funguje rozlišování malých a velkých písmen ve vyhledávacích vzorech. Nejdříve vyhledáme soubory obsahující „geo“ v názvu a poté ty, které obsahují „Geo“:

fdfind -tf geo
fdfind -tf Geo

V prvním příkazu jsme použili vzor s malými písmeny, proto `fd` nerozlišoval velikost písmen. „geo“ i „Geo“ jsou platné shody.

Ve druhém příkazu jsme použili velké písmeno, `fd` přešel do režimu rozlišování velikosti písmen a platnou shodou je pouze „Geo“.

Spouštění příkazů

`fd` umožňuje spouštět další příkazy na všech nalezených souborech.

Řekněme, že víme o existenci zip souboru někde ve struktuře zdrojových kódů. Najdeme jej pomocí tohoto příkazu, který vyhledává soubory s příponou zip:

fdfinf -e zip

Pomocí volby `-x` (exec) můžeme předat každý nalezený soubor jinému příkazu. Například zde voláme nástroj unzip pro rozbalení našeho ZIP souboru („{}“ je zástupný symbol pro nalezený soubor):

fdfind -e zip -x unzip {}

Tím se soubor rozbalí v aktuálním pracovním adresáři. Pokud chceme soubor rozbalit do adresáře, kde se nachází ZIP soubor, můžeme použít jeden z těchto zástupných symbolů:

{}: Úplná cesta a název nalezeného souboru.
{/}: Název nalezeného souboru.
{//}: Adresář obsahující nalezený soubor.
{/.}: Název nalezeného souboru bez přípony.

Aby se ZIP soubor rozbalil do svého adresáře, použijeme volbu `unzip -d` (adresář) a předáme jí zástupný symbol nadřazeného adresáře (`{//}`):

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

Soubor je nalezen a rozbalen do svého adresáře.

Závěr

Díky své jednoduchosti a zaměření na běžné použití se `fd` může stát vaším novým „příkazem pro vyhledávání“. Když budete potřebovat pokročilejší funkce, můžete se vždy spolehnout na osvědčený `find`.