Hatékony keresés – fzf röviden

Hatékony keresés - fzf
Hatékony keresés - fzf
Hatékony keresés? Ha valamelyik állományt, mappát kell keresni mindenki valamelyik fájlkezelő keresőjére gondol. Ami jó ötlet, de van pár hibája. Sok fájlkezelő keresője túl egyszerű egy komolyabb kereséshez, és sok esetben lassú is. Ha egymás után keresünk állományokat akkor kitűnik az egyik legnagyobb hiba: nem feltétlen készít a kereső egy saját adatbázist, amiben gyorsabb keresni. A nagy tárolók korában a gyorsaság fontos, hiszen nem túl élvezetes a keresés. Milyen megoldást lehet még bevetni? Egy viszonylag egyszerűt mutatok, ami terminálos, gyors és jól skálázható.

Fájl keresés: fzf

Az fzf nincs alaból telepítve, így a saját rendszerednek megfelelő mód telepíteni kell. Van bináris állomány is, amit nem kell telepíteni, és a legújabb!

Itt találsz leírást róla. Érdemes elolvasni, mert most csak nagyon röviden mutatom be.

Ahogy látni a leírásokban az fzf keresőt fuzzy keresőnek minősítik. Mi is az a fuzzy kereső? A fuzzy keresés olyan keresési technika, amely lehetővé teszi a pontatlan vagy részben megfelelő találatok visszaadását. Ez hasznos, ha a felhasználó nem biztos a keresett kifejezés pontos helyesírásában, vagy ha különböző formában megjelenő szavakat és kifejezéseket szeretne megtalálni.

Az fzf alap használata egyszerű, elindítod az

fzf 

parancsot és pár másodperc alatt már üzemkész is a dolog. Gépeld be a keresendő karakterláncot és meg is adja a találatokat. Tedd is meg egy általad választott állomány (könyvtár, fájl) keresésével!

Ha csalódtál, akkor jól dolgoztál! Így nehézkes használni. Az fzf elő ránézésre furán dolgozik, hiszen az alma keresésre az Almárium_magazin is előkerül, mert abban szerepel az alma összes karaktere, igaz nem egyben. Illetve jó lenne, ha nem minden állományban keresne, hanem csak a megadott típusban.

Amit már most érdemes kipróbálni a keresés ismétlése. Amikor megkapod az fzf promptját, és begépeled az első keresendő karakterláncot, majd azt kitörlőd, és begépelsz egy újabbat látni fogod: igen gyorsan, a gépeléskor már válogatja is ki a megfelelő találatot. Ez teszi nagyon hatékonnyá a programot, nem olvassa be újra a lemezeket, hanem a saját adatbázisát használja újra fel. Ez a lehetőség addig áll fenn, amíg ki nem lépsz a programból.

Profi megoldás

Ha állományok és keresés, akkor find! Már volt róla szó, így nagy újdonságot nem fogok mutatni. Aki picit (valóban alap szinten) elsajátítja a find használatát neki már minden ilyen feladat egyszerű lesz.

Így a keresést két jó kereső programmal hajthatjuk végre.

A find részben adhatjuk meg a hol, melyik könyvtárban és a milyen tipust keressen feladatot. Most az egész saját könyvtárat akarom kerestetni, de csak a könyvtárnevekben.

find /home/$USER -type d | fzf

Egyszerű? Az. Ezután már csak a könyvtárakban fog keresni, így a lemezek beolvasása gyorsabb lesz és valóban csak a releváns mappa neveket látja.

Miután megkapjuk a promptot érdemes megismételni a keresést, aminek már csak egy hibája van: az alma keresésre az Almárium_magazin is előkerül. Ezen nagyon egyszerűen javíthatunk. Meg kell adni a programnak, hogy csakis az egyben szereplő alma legyen jó találat!

Ezt egy bevezető karakterrel tehetjük meg. A prompt után a keresendő karakterláncot egy ' karakterrel kezdjük:

'alma

Így már csak valóban az alma lesz kikeresve. Amit érdemes tudni az egyes idézőjel hatóköre csak egy szóra terjed ki, így ha a keresendő dolog két vagy több szóból áll, akkor mindegyik elé oda kell tenni az idézőjelet!

'alma 'eladás

Nekem a kereséseket ez a kis program nagyon hatékonnyá teszi. A felhasználására az interneten rengeteg példa van, amik jellemzően a fentihez hasonló csővezetékeken alapulnak.

Nem csak állományokat, hanem állományokban is kereshetünk

Ha csővezetékkel egy program kimenetét átirányítjuk az fzf programba, akkor a kimenetben is kereshetünk. Ilyen program lehet a cat is, ami kilistázza az adott állományt, de most nem a monitorra, hanem az fzf bemenetére. Egy hasznos megoldás a függőségek keresésre:

apt-cache search . | fzf --preview 'apt-cache depends {1}' 

Próbáld ki, és a kapott prompt után begépelve megkapod a függőségeket.

Logikus, hogy ilyen megoldást akkor használunk ha több keresést is szeretnénk lefuttatni. A többszörös keresés a legnagyobb előnye a programnak.

Vizuálisoknak elkészült egy videó: https://www.youtube.com/watch?v=hU0L2nEtzWg&t=1s