Nástroj pro indexování obsahu (soubory, podadresáře) zadaného adresáře/souboru a zároveň nástroj který dokáže provádět dotazy nad vytvořeným indexem. Spíše nežli na kvantitu je nástroj zaměřen na kvalitní návrh, který je velice snadno rozšiřitelný, zvláště pak tvorba dotazů díky templatované třídě Query. Program dokáže rozpoznat tyto druhy soubor: Složka, Textový soubor, JPG soubor, PNG soubor, FIFO, blokový soubor, socket, řetězcový soubor a symbolic link. Vše ostatní je chápáno jako binární soubor. Rozponávání je prováděno dle přípony souboru a následného ověření, či podle filesystémového volání.
U každého typu souboru jsou ukládána obecná a specifická metadata pro daný typy. Obecné: velikost, datum modifikace, relativní cesta k indexu, indexové číslo. U některých typů není možné získat informace o velikosti a datu modifikace. JPG: bitová hloubka, šířka, výška, tvůrce, popis, iso PNG: bitová hloubka , šířka, výška, png color type, který je momentálně nevyužit TXT: jednotlivá slova v souboru
Výsledný index je vytvořen -c --create(filename) a uložen -s --save(indexname) jako binární soubor se serializovanými daty, která je možno posléze načít -l --load(indexname) a rekonstruovat původní indexovaný adresář/soubor. Při vytváření indexu z adresáře/souboru je možno -f --follow_sym_links nastavit, aby symoblic linky místo pouhé uložený byly intepretovány jako to, na co ukazují. Vytvořený index je možno porovnávat s jinými indexy -C --compare (indexname). Při výpisu porovnání je vidět jaké soubory byly přidány odebrány popřípadé modifikovány. Zárověn je možno index vypsat ve stromové struktuře -p --print.
Největší důraz je kladen na hledání v indexu -Q --search (dotaz) Nad indexem je možno vytvořit jakýkoliv dotaz na jakoukoliv vlastnot výše popsanou. Dotazy se mohou řetězit pomocí klíčových slov AND, OR nebo prioritizovat pomocí ( ). Samotný dotaz má strukturu: vlastnost RELACE prvky. Relace může být <, <=, >, >=, !=, ==, vlastnost již výše specifikované v angličitně. Vlastnosti: index, type, path, filename, mod_time, txt_words, img_width, img_height, img_bit_depth, jpg_description, jpg_artist, jpg_iso type: -> "DIRECTORY" "TEXT_FILE" "JPG_FILE" "PNG_FILE" "BINARY_FILE" "SYMBOLIC_LINK" "BLOC_FILE" "SOCKET" "FIFO" "CHARACTER_FILE". Prvky: datum ve formátu dd:mm:yy hh:MM:ss; řetězec ve formátu "string"; výčet ve formát prvek , prvek , prvek; číslo
Příklady: 1. size <= 9 AND type == "TEXT_FILE" OR txt_words == "ahoj" , "jak" , "se" , "mas" 2. imd_width < 10 OR type == "JPG_FILE" OR img_description == "ahoj" , "jak" , "se" , "mas" 3. mod_time > 01:01:2019 00:00:00
!!! Při zadávání je třeba dbát na to, jak slova interpretuje shell a escapovat
Bohužel již nezbyl čas na vytvoření lexeru, a tak je nutno mezi každým slovem( i čárkou) dělat mezery. Řetězce je nutno uzavřít do uvazovek a datum zadat ve formátu dd:mm:yy hh:MM:ss. Samotné hledání vypíše pouze krátký výpis pro změnu výpisu je nutno zavolat hledání s přepínačem -pe --printe případně -pn --printn pro žádný výpis(pouze celková počet).
Pro rychlou nápovědu stačí zavolat s -h --help
Nejprve je třeba nainstalovat potřebné knihovny, ty jsou závislé na distribuci a jsou uvedeny v souboru requirements.txt. Poté stačí zavolat:
make
To nám vytvoří spustitelný soubor Archivator, který je možno spustit s přepínačem -h --help pro nápovědu.
Nástroj byl vytvořen jako zápočtový program pro předmět BI-PA2 na FIT ČVUT. I po letech mě překvapuje, že jsem napsal něco takto pěkného :)