Hlavní navigace

Findex - hledáte něco?

Bogdan Pilch

Už delší dobu mi chyběl nějaký program, který by uměl najít spustitelný soubor nejen podle přesného názvu (to by se dalo vyřešit příkazem `which'), ale i podle ne zcela triviálních regulárních výrazů. Dost často se mi stávalo, že jsem si chtěl spustit nějaký program, ale nemohl jsem si vzpomenout na jméno.

Například jsem chtěl vyzkoušet KDE prográmek na přehrávání CDéček, ale nemohl jsem si vzpomenout na název; věděl jsem jen, že bude asi začínat na ‚k‘ a bude možná obsahovat „cd“. Zkoušel jsem psát ‚kc‘ a tabelátorem doplnit, ale marně. ‚kp‘ taky nepomohlo. Pak jsem zjistil, že se jmenuje `kscd' :-). (Teď by stačilo spustit `findex -G -E „^k.*cd“' a hned bych ho měl.)

Začal jsem takový prográmek hledat na webu, ale kupodivu bez valných výsledků. Čekal jsem desítky odkazů na prográmky řešící tento problém, ale …NIC. Našel jsem pouze jeden, napsaný v perlu a zdaleka neumožňující to, co bych si představoval. Pro zvědavé uvedu odkaz na nalezený skript. Je to v podstatě `which' napsaný pro Windows NT.

Rozhodl jsem se tedy napsat si vlastní program, který by umožňoval hledat spustitelné soubory podle názvu a zároveň poskytoval uživateli co největší flexibilitu pro zadání vyhledávacího vzoru. Program jsem nazval nečekaně `findex' (čti [fajndex]) podle ‚Find Executable‘.

Samozřejmě, že jsem program uvolnil pod licencí GNU GPL :-)

Přepínače

Rozhodně doporučuji `findex –help', případně README soubor.

Tabulka č. 342
-h, –help Vypíše help message a skončí.
-v, –version Vypíše verzi programu a skončí.
-G, –grep_options 1) Použije program ‚grep‘ na hledání souborů.
2) Následující parametr předá programu grep.
-F, –find_options 1) Použije program ‚find‘ na hledání souborů.
2) Následující parametr předá programu find.
-r, –recursive Bude hledat rekurzivně ve všech adresářích.
-d, –directories Kromě adresářů uvedených v proměnné
PATH bude hledat i v adresářích uvedených
v následujícím argumentu (musí mít stejný
formát jako PATH – adresáře oddělené
středníkem).
-D, –Directories Bude hledat pouze v adresářích uvedených
v následujícím argumentu (stejně jako u -d
formát PATH).
-x, –executables-only Vypíše pouze ty soubory, které mají
nastavené právo pro spouštění pro alespoň
jednu skupinu uživatelů.

Defaultní přepínače

Findex implicitně používá ‚grep‘ k matchování názvů souborů (nastaven přepínač -G), hledá nerekurzivně (nenastaven přepínač -r), hledá v adresářích uvedených v proměnné prostředí $PATH a hledá všechny soubory nezávisle na jejich přístupových právech (nenastaven přepínač -x).

Program findex adresáře nevypisuje, pokud použijete grep na matchování jmen. Kdežto s findem vám dá na výstup i adresáře vyhovující vyhledávacím podmínkám.

Příklady

1)

   findex black

V adresářích z proměnné PATH hledá soubory, které ve svém názvu obsahují řetězec ‚black‘. Použije se ‚grep‘ (implicitně).

2)

   findex -G -E "^k.*cd.*"

V adresářích z proměnné PATH hledá soubory, které začínají písmenem ‚k‘, pak následuje libovolný počet libovolných znaků, pak obsahují řetězec „cd“ a nakonec mají libovolný počet libovolných znaků. Findex pouze předá přepínač -E programu `grep' a argument „^k.cd.“. Přepínač grepu -E znamená „Extended regex“, tedy rozšířené regulární výrazy.

3)

   findex -D "langs/perl:doc/perl" -F "-maxdepth 5" "users"

V adresářích langs/perl a doc/perl (relativní vůči aktuálnímu adresáři) hledá soubory obsahující v názvu řetězec „users“ (mohl by např. najít soubory ‚users.pl‘ a ‚users.tex‘). Tady vám findex váš vzor („users“) malinko upraví tak, že na konec findu předává vzor „.users.“. Je to proto, že používá přepínač findu -regex, který matchuje na celou cestu souboru (nevyhledává podřetězec). Můžete tedy použít jakýkoliv regulární výraz, který sežere i find.

4)

   findex -r -x -d "/opt/local/bin" "black"

V adresářích z proměnné PATH a navíc v adresáři /opt/local/bin hledá soubory, jejichž jména obsahují řetězec „black“ a jejichž přístupová práva mají u alespoň jedné skupiny uživatelů nastavené právo na spouštění souboru.

5)

   findex -F "" black

Tímto jednoduchým způsobem můžete přinutit findex, aby používal program `find' na hledání souborů, aniž byste chtěli předávat nějaké další parametry pro `find'.

Download

Program findex najdete zde.
Je to balík ve formátu tar-gzipped, ten rozbalíte a naistalovat findex můžete spuštěním příkazu `make' v adresáři, do kterého jste balík rozbalili.

Logo

                     _____
                ,---';;;;;`-
              ,';;;;;; '''''''`-,
             ; ;;;;,,;;;;;;;;;;;`;
            ` ;;; ; ;;;;;;;;,-'`-;
            ` ;;;;' ;;; ;;;; ,-'~
        /\  /\ ;'  ;;;;;;; ,-'
       ,--`/ ^;    ;:;;;;  ;
     .'        `.   ;;;;;  `.
    ,' (O)       ;  ;; ;;;; `.
   (v}'         ,' ; ;; ;;;; `.
    `-.--'   _,'`.  :;;;  ;;; :
   _._ ~`---' ,-  `.`.;;;;;; ;`.
  /___\ ;   ,'     :  . ;; ;; ;;
 c|##c==-.__;      `-. ; ;;;;; ;
 c:##c==,_  `    ,'  `-.;;;;;;;;
  `----'  `------',    `.; ;;;;;
       :     __,----. , `.;;;;;
     ,'`.  ,' ,     ' `  ;;;;;
     :  `.,' ,`       , ,';;
     `._  : ,`       ,_,,'
  __,-' `-`_`   ____,-'
 Ccc_,----'_`--'   _)
        CCcc_,----'

Veverka našla oříšek :-)

Našli jste v článku chybu?

2. 10. 2002 8:56

Pichi (neregistrovaný)

Osobne se mi light verye taky vic libi. Je to takove pekne unixove a jestli autor nedokaze na konec toho aliasu doplnit jeste to -E tak je asi ponekud natvrdly. Osobne ale trosku nechapu to //:/mezera na konci toho vkladani PATH. Nemuzu si to prozkouset a v dokumentaci to nejak nemuzu najit.

27. 9. 2002 23:58

joe (neregistrovaný)

Tak jsem videl rozdil v rychlosti hledani findex - light verze od p. Jurka a findex z tohohle clanku. Uz na prvni pohled je jasne, co je lepsi a podle modelu KISS.
Je hezke, ze je na rootovi v posledni dobe hodne clanku, ale co kdyby byly o necem a ne o tom jak vytvaret narocne molochy, kdyz staci cist man.
Nic proti, ale nebyl tohle prave ten duvod, proc jste na siti nic nenasel?



Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte