Hlavní navigace

Findex - hledáte něco?

24. 9. 2002
Doba čtení: 3 minuty

Sdílet

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

ict ve školství 24

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

Autor článku