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.
-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 :-)