fd hledá markdown soubory

Moderní CLI: fd – najdi cokoliv rychleji než findem

Arch Linux CZ2 min

Díl 4 ze 4 — Moderní CLI

find je mocný nástroj, ale jeho syntaxe patří k nejošklivějším v celém Unixu. find . -type f -name "*.md" -not -path "./node_modules/*" – kdo to má pamatovat. fd řeší přesně tohle: dělá 90 % toho, co lidi z find reálně potřebují, ale jednoduše.

Instalace

sudo pacman -S fd

Balíček je v extra repu. Na jiných distribucích může být pod názvem fd-find, na Archu je čistě fd.

Základní použití

# najdi vše s "config" v názvu (rekurzivně od aktuální složky)
fd config
 
# jen v konkrétní cestě
fd config ~/.config
 
# jen soubory (bez složek)
fd -t f config
 
# jen složky
fd -t d config
 
# podle přípony
fd -e md
fd -e py
 
# včetně skrytých souborů
fd -H .env
 
# včetně ignorovaných v .gitignore
fd -I nejaky-vzor

Porovnání s find

Najdi všechny .md soubory:

# find
find . -type f -name "*.md"
 
# fd
fd -e md

Najdi soubor a spusť nad ním příkaz:

# find
find . -name "*.log" -exec rm {} \;
 
# fd
fd -e log -x rm

Najdi soubory změněné za posledních 24 hodin:

# find
find . -type f -mtime -1
 
# fd
fd --changed-within 1d

Rozdíl je vidět hlavně v čitelnosti.

Co fd umí navíc

Respektuje .gitignore. Neprohledává node_modules, target, .venv a další adresáře, které jsi vyloučil. Můžeš to obejít přes -I.

Barevný výstup. Rozlišuje typy souborů podle LS_COLORS.

Paralelní hledání. Využívá všechna dostupná jádra CPU.

Chytré case-insensitive matching. Když napíšeš fd readme, najde i README.md a Readme. Když použiješ velké písmeno (fd README), přepne se do case-sensitive režimu (smart case).

Regex out-of-the-box. Vzor je regex, ne shell glob. Pro glob použij -g.

fd '^test_.*\.py$'      # regex
fd -g 'test_*.py'       # glob

Kombinace s dalšími nástroji

Spouštění akce nad výsledky:

# smaž všechny .log soubory
fd -e log -x rm
 
# převeď všechny .png na .webp
fd -e png -x cwebp {} -o {.}.webp
 
# {} = cesta k souboru
# {.} = cesta bez přípony
# {/} = jen název souboru
# {//} = cesta k rodičovské složce

Paralelní zpracování s -x:

# každý soubor jako samostatný proces (paralelně)
fd -e jpg -x jpegoptim
 
# všechny soubory najednou (jako xargs)
fd -e jpg -X du -ch

Kombinace s bat pro preview:

fd -e md | fzf --preview 'bat --color=always {}'

Kombinace s ripgrepem:

# najdi TODO jen v Python souborech
fd -e py -X rg "TODO"

Praktické triky

Vyloučit konkrétní adresáře:

fd -e md -E node_modules -E .venv

Podle velikosti:

fd --size +10M         # větší než 10 MB
fd --size -1k          # menší než 1 KB

Podle času změny:

fd --changed-within 2h
fd --changed-before 1week

Absolutní cesty:

fd -a config

Follow symlinks:

fd -L config

Vlastní hloubka:

fd --max-depth 3 config
fd -d 3 config           # zkráceně

Alias

Do ~/.zshrc:

alias find='fd'

Když opravdu potřebuješ původní find:

\find . -name "*.md"
command find . -name "*.md"

Konfigurace

fd nepoužívá config soubor – všechno se ovládá přes proměnné a přepínače.

Užitečné proměnné:

# vlastní výchozí ignorace (kromě .gitignore)
export FD_IGNORE_FILE=~/.config/fd/ignore

~/.config/fd/ignore:

node_modules
target
.venv
__pycache__
*.pyc

Kdy se vrátit k find?

find má fičury, které fd nemá:

- Komplexní logika s -and, -or, -not - Kontrola oprávnění (-perm) - Změna vlastníka souborů během hledání - Kompatibilita napříč všemi UNIX systémy Pro skripty, které musí běžet i na starém serveru bez fd, drž se find.

Shrnutí

fd neuchvátí nikoho, kdo find důkladně nezná. Ale kdo ho zná a proklíná jeho syntaxi, ocení fd do pěti minut. Kratší, rychlejší, respektuje .gitignore.

Příště se podíváme na ripgrep – nejrychlejší způsob, jak hledat text v souborech.

Komentáře