Pokud se bavíme o programu find, jedná se o program, který na příkazovém řádku umožňuje vyhledávání souborů podle jména, data změny atp. Find je součástí každého unixového systému a Mac OS X není výjimkou.
Mdfind je o proti tomu něco jiného. Jedná se o službu, který Apple inzeruje jako Spotlight. Bohužel, grafické rozhraní Spotlightu není možné využít ve skriptu, proto stojí za to se seznámit i s textovým rozhraním této služby.
Popis tohoto příkazu byl rozebírán podrobněji na mnoha stránkách. Takže jen jednoduchý přehled:
mdfind Rails
- zobrazí všechny soubory obsahující Rails ve jménu,obsahu nebo metadatech
mdfind -onlyin ~/Desktop Rails
- zobrazí soubory obsahující Rails ve jménu, obsahu nebo metadatech nacházejících se na pracovní ploše uživatele (znak ~ označuje domovskou složku uživatele, Deskotp je pak označení pracovní plochy)
mdls Document.doc
- zobrazí jaké informace o souboru Document.doc jsou uloženy ve Spotlightu. Asi bych ho zde nepsal, nicméně vypíše názvy polí které jsou užitečné v následujícím hledání.
mdfind "kMDItemAuthors == '*Homer*'"
- nalezne všechny dokumenty, jejichž autorem je Homer. Všimněte si, že celý řetězec je ve dvojitých uvozovkách.
mdfind "kMDItemAuthors == 'Jan Hammer' && kMDItemContentType == public.mp3'"
- je již kombinací dvou polí (jejichž jména lze zjistit přes mdls) značka "&&" označuje logický operátor AND.
- k public.mp3 ještě jedna poznámka. Spotlight jednotlivé typy souborů řadí do stromu, takže rodičem public.mp3 je public.audio. Pokud tedy zadáte místo public.mp3 public.audio, tak vám spotlight nalezne nejen mp3 soubory, ale také AIFF či AAC soubory.
mdfind "kMDItemContentType == 'com.microsoft.word.doc' || kMDItemContentType == 'com.adobe.pdf'"
- značka "||" je logickým operátorem OR
- zobrazený příkaz zobrazí všechny wordovské dokumenty a pdf
Speciální pole pro hledání
kind Místo kMDItemContentType je možné využít klíčové slovo kind. Například:
mdfind "kind:pdf RFC"
- nalezne pdf dokument obsahujicí RFC
Možnosti typu kind:
- Aplikace
- kind:application
- kind:applicaitons
- Kontakty
- kind:contact
- kind:contacts
- Složky
- kind:folder
- kind:folders
- Email
- kind:email
- kind:emails
- kind:mail message
- kind:mail messages
- Události iCalu
- kind:event
- kind:events
- iCal ToDo položky
- kind:todo
- kind:todos
- kind:to do
- kind:to dos
- Obrázky
- kind:image
- kind:images
- Filmy
- kind:movie
- kind:movies
- Hudba
- kind:music
- Audio
- kind:music
- PDF
- kind:pdf
- kind:pdfs
- Předvolby
- kind:system preferences
- kind:preferences
- Záložky
- kind:bookmark
- kind:bookmarks
- Písma
- kind:font
- kind:fonts
- Prezentace
- kind:presentations
- kind:presentation
Hledání podle data Datum využívá speciálního klíčového slova "date". Můžete tedy napsat:
mdfind "date:this week"
- vylistuje všechny soubory tohoto týdne. Dalšími možnostmi jsou:
date:this year - tento rok
date:this month - tento měsíc
date:this week - tento týden
date:yesterday - včera
date:today - dnes
date:tomorrow - zítra
date:next week - příští týden
date:next month - příští týden
date:next year - příští rok
Je více než zřejmé, že parametr date s určením budoucnosti jako zítra, příští týden atd. se nebude vztahovat na datum změny souboru ale na schůzky v iCalu.
No a závěrem jedno varování. Ačkoliv mdfind obsahuje mnoho věcí, které obyčejný find nikdy mít nebude. Find bude stále neocenitelný pokud budete hledat něco na velmi hluboké úrovni. Find má také mnohem bohatější nabídku možností, které může provádět. Proto je dobré nepřepisovat skripty z find na mdfind, jednak kvůli funkcím, ale hlavně proto, že ze své skripty nebudete moci přeportovat na jinou platformu.
A ještě jeden tip. Pokud se podíváte na mdfind2, což je prakticky totéž co mdfind s tím rozdílem, že výstup můžete vhodit do xml formátu. Výsledný xml soubor překonvertovat do formátu Atom, což je něco co umí číst například FireFox či Safari výsledkem jsou pak například aktuální odkazy na vaše fotografie v systému. S trochou skriptování a fantazie by pak mohlo být možné vytvořit publikační systém či cokoliv jiného.