Find helyett

Bár a legtöbb parancssoros megoldásnál a find parancsot ajánlja mindenki a fájl keresés elvégzéséhez, és egyéb tevékenységhez, de nem biztos, hogy mindig az a legjobb. Én most egy egyszerűbb, de jól használható CLI, azaz terminálos kereső programot mutatok be. Miért? Egyrészt a find viszonylag sokat tud, de igen sok paramétere közt elvész a lényeg, az egyszerű kezelhetőség. A fájl keresés megoldható GUI, azaz grafikus felületen is, hiszen nagyon sok jó fájlkereső program létezik. A legtöbb grafikus fájlkezelőben is van ilyen lehetőség. Így ha "csak" keresel valamit, akkor nem feltétlen kell a parancssort megnyitni. Ha komolyabb teendő van, azaz a kikeresett fájlokkal szeretnél is valamit kezdeni, akkor már sok esetben a grafikus programok nem adnak megoldást.

Egyszerű fájlkereső program: fd

Azaz az fd. Az fd egy egyszerű, gyors és felhasználóbarát eszköz, amelynek célja a find-hez képest gyorsabb teljesítés. Nem a find teljes helyettesítésére szolgál, hanem egy könnyen használható alternatívát kínál, amely valamivel gyorsabban teljesít. Legalábbis ezt szokták róla mondani. A telepítése egyszerű, a legtöbb tárolóban benne van. Így ez nem okozhat gondot senkinek. Ha nincs a tárolódban, akkor itt megtalálhatod a neked megfelelőt.

Miért érdemes az fd-t használni fájl kereséshez

Az fd néhány figyelemre méltó tulajdonsága:

  • Könnyen használható szintaxis: fd „minta” egyszerűbb, mint a find -iname „minta”.
  • Színes kimenet, ami nagyon kellemes, ha megszoktuk a fejlettebb, és jobban kinéző terminálunkat.
  • Gyors teljesítmény. A fejlesztői referenciaértékek itt érhetők el.
  • Intelligens keresés alapértelmezés szerint kis- és nagybetűk megkülönböztetése nélkül, de azonnal átvált a kis- és nagybetűk megkülönböztetésére, ha a „minta” nagybetűs szimbólumot tartalmaz.
  • Alapértelmezés szerint nem keres rejtett fájlok és könyvtárak közt.
  • Unicode támogatása.
  • A regex-ek támogatása.Oké, a reklám megvolt, nézzük is az egyszerű fájl keresés lehetőségét.

Az első tipp: az fd alkalmas a ls egyszerű kiváltására. Ha paraméter nélkül indítod, akkor kilistázza a könyvárban lévő fájlokat. Ami színes, és az összes alkönyvtárat is mutatja. Ezt érdemes tudni, mert ha a fő könyvtárban indítod, akkor nagyon hosszú lesz a kimenet… Bár ezt a find is így teszi, így csak kezdőknek lesz furcsa. A legegyszerűbb keresés a fájl kiterjesztésére való keresés, ami megoldható a hagyományos módon is:

fd *.jpg

Ami elvileg kilistázza az összes jpg fájlt. Ha kicsit haladóbbak vagyunk, akkor ezt hanyagoljuk és a beépített fájlkiterjesztésre való keresést használjuk. Ez az esetek nagy részében ugyanazt az eredményt adja, de elegánsabb:

fd -e jpg

A keresés simán mehet a fájl névének egy részére is: fd akarmi Így az akarmi karaktersort tartalmazó fájlnevek lesznek kilistázva. A kettő együtt is használható, így a

fd -e jpg akarmi

esetén csak azok kerülnek kilistázásra, amik tartalmazzák az karmi tagot és jpg fájlok. Ha pedig az -E kapcsolót használod, akkor kizárod a találatból azokat, amikben ott az akarmi karaktersor. A kettő itt is kombinálható:

fd -e jpg akarmi -E akarmiket

Az akarmiket tartalmazó fájlnév ki lesz zárva, de a többi akarmi karaktersort tartalmazó nem. Kicsit finomítható így a keresés. Két fontos kapcsolót mindenképp ismerni kell, hiszen ezt a find-nél megszoktuk és nagyon hiányozna:

-d, --max-depth <depth> Set maximum search depth (default: none)

A keresési mélységet adhatjuk meg, alapesetben az összes alkönyvtár mélységben keres a megadott minta szerinti fájlokat. Ezt szabályozhatjuk, ha kell.

-t, --type <filetype>... Filter by type: file (f), directory (d), symlink (l), executable (x), empty (e), socket (s), pipe (p)

Csak a megadott típusokban keres. A fájlok közt, vagy a könyvtárnevek közt egy nagyon hasznos megoldás.

Csak ennyi?

Nem, ha csak ennyit tudna, akkor nem lenne érdekes, hiszen ezt sokkal kényelmesebben megtehettük grafikus felületen a legtöbb fájlkezelővel. Ami az fd és a find nagyon nagy előnye: a találatokat átadhatjuk feldolgozásra egy másik programnak.

A find-hez hasonlóan az -x vagy –exec argumentumokkal párhuzamosan hajthat végre parancsokat a keresési eredményekkel. Szuper!

fd -e jpg -x chmod 644 {}

Ismerős lehet a szerkezet, hiszen aki legalább kétszer használt find-et, vagy rákeresett egy-egy megoldásra ezt a kapcsos zárójeles, vagy hasonló megoldást már látta. Itt a jpg fájlok kapnak 644-es jogot, azaz a {} annyit tesz, hogy a talált fájlokat behelyettesíti. Bár én sok esetben a törlésre, mozgatásra vagy másolásra használom, de legyünk óvatosak ezzel. Ha rosszul paraméterezed fel a keresési részt, akkor is azt kapod, amit kértél: az összes megtalált fájlon, az összes alkönyvtárban végrehajtja! Ami törlésnél, vagy mozgatásnál okozhat gondot. Oda kell figyelni és érdemes kétszer megnézni a beírt parancsot! Sok esetben nem a keresett, és megtalált fájlokkal akarunk valamit tenni, hanem a megtalált fájlnévvel, vagy a kiterjesztéssel, elérési útvonallal stb.

  • {} A fájlnév és az élési útvonal kerül behelytesítésre( wp-content/uploads/01.jpg ). Ideális az adott fájllal való munkához. Mozgatás, törlés stb. esetén ezt használjuk.
  • {.} Hasonló mint a {}, de a fájlkiterjesztés levágja, de az elérési utat is használja ( wp-content/uploads/ 01 ).
  • {/} Csak a fájlnevet tartalmazza (01.jpg ).
  • {//} A keresett fájl elérési útvonala szülőkönyvtára ( wp-content/uploads ).
  • {/.} Csak a fájlnév, kiterjesztés nélkül ( 01 ).

Aki ismeri a basename parancsot értékelni tudja, hogy egyszerűen az fd is kezeli ezeket. A gyors fájl keresés és az fd – kell ez nekem? Igen, kell. Nagyon kérdéses, hogy aki a find-et használja ezer éve, neki érdemes-e váltani, de aki most kezdi a terminálos keresést és a keresett fájlokkal a műveleteket, nála már érdemes egy esélyt adni az fd-nek. Én megkedveltem, és komolyabb korlátba eddig nem ütköztem ezzel a kis programmal. A gyorsasága meggyőzött, hogy van értelme ezt is használni. 2020 októberében Arch alatt próbáltam ki. 

Amúgy a blogomban jelent meg, a magyarlinux.hu oldalon. :)