Přidat článek mezi oblíbenéZasílat nové komentáře e-mailem Automatizácia vo svete počítačov III. - AppleScript

Mac OS X podobne ako aj ostatné UNIX-like systémy obsahuje Bash. Scriptovací jazyk, ktorým je možné ovládať systém a jeho súčasti. Systém od Apple však navyše obsahuje aj vlastný jazyk tzv. AppleScript. Tento článok by Vás mal s týmto jazykom aspoň trochu oboznámiť.

Pokiaľ ste pracovali s Automatorom a došli ste do bodu, kedy nedokáže úplne vyhovieť Vašim potrebám, je na čase obzrieť sa po trochu silnejšom nástroji. AppleScript je v tomto prípade dobrým adeptom, pretože okrem iného dokáže s Automatorom spolupracovať. Samozrejme, ako pri každom skriptovacom jazyku, aj pri AppleScripte sa vyžaduje aspoň nejaká znalosť programovania. Je to jazyk ako každý iný a treba si viac menej len zvyknúť na syntax a logiku s akou v ňom písať.

V zozname medzi aplikáciami v zložke Utilities nájdeme "AppleScript Editor".
Samotný editor je veľmi jednoduchý a obsahuje len niekoľko ovládacích prvkov.

Editor

Editor je rozdelený do štyroch častí.

1. Lišta s tlačidlami
2. Okno kódu
3. Okno Logu/Popisu
4. Prepínanie Logu a Popisu

http://pc.poradna.net/file/view/7452-obrazok-1-png

Lišta s tlačidlami obsahuje tlačidlo pre skompilovanie projektu, jeho spustenie a stopnutie. Úplne vľavo je tlačidlo "Record", ktoré umožňuje takzvane nahrať to, čo práve vykonávate. Napríklad pri otvorení okna Finderu a zložky "Documents" sa zapíše automaticky daný príkaz.

7454-obrazok-2-png

Základným kameňom je príkaz "Tell application", ktorý udáva, s ktorou aplikáciou pracujeme. K nemu voláme dostupné príkazy danej aplikácie. Aby sme len nehľadali na slepo, tak všetky príkazy aplikácií sú uložené v dobre zdokumentovanom slovníku.

Cez menu Editora "File > Open dictionary" sa zobrazí zoznam všetkých aplikácií.

7455-obrazok-3-png

Po rozkliknutí jednej z nich sa zobrazí slovník (dokumentácia), ktoré príkazy pre AppleScript podporuje.
Najväčšiu podporu majú samozrejme aplikácie vstavané resp. priamo od Apple.

7456-obrazok-4-png

AppleScript je plnohodnotný skriptovací jazyk. Obsahuje teda štandardné funkcie akými sú podmienky, cykly, premenné, systémové premenné atď.
Úlohou tohto článku nebude naučiť Vás skriptovať v AppleScripte, keďže na to je potrebné celú knihu. Ak by mal niekto záujem, viem poskytnúť jednu vo formáte PDF (angl. jazyk). Primárnym účelom je oboznámiť sa s možnosťami AppleScriptu a ukázať si ich na príklade.

Príklad

Pokiaľ pracujeme na určitom projekte, vždy máme vyhradenú nejakú hlavnú zložku, kde ukladáme napríklad skripty, dokumenty a iné zdroje. Správnou zálohou môžeme predísť komplikáciám pri strate týchto dát.

Pomocou AppleScriptu a služby Dropbox som si vytvoril vlastný nástroj na zálohovanie, pričom aplikácia iCal sa mi stará o pravidelné spúšťanie môjho skriptu.

Aké boli moje požiadavky na skript?

1. Automatické spúšťanie každý pracovný deň.
2. Záloha mimo interný disk notebooku.
3. Pondelkové full zálohy.
4. Full záloha aj v prípade, že sa nič nezmenilo.
5. Ostatné dni - priebežné inkrementálne zálohy, len pokiaľ sa udiali zmeny.
6. Dátumová stopa zálohy.
7. Automatické mazanie starých záloh (kvôli úspore miesta).

Využil som teda AppleScript a službu Dropbox a napísal som si nasledovný skript.

-- zistime ci je pondelok
if weekday of (current date) as string = "Monday" then
	-- nazov suboru vytvorime vo formate full_yyyymmdd
	set fname to "full_" & (year of (current date) as string) & (month of (current date) as integer as string) & day of (current date) as string
	-- nastavime si cielovu lokaciu
	set dp to "Macintosh HD:Users:jann:Dropbox:Projekty:Zaloha:" as string
	-- zlozime vyslednu cestu
	set ck to dp & fname & ":"
	
	tell application "Finder"
		-- zistime ci nahodou uz subor s tymto nazvom neexistuje
		if not (exists folder ck) then
			make new folder at dp with properties {name:fname}
			copy folder "Macintosh HD:Users:jann:Documents:Projekty:hart:" to folder ck
		else
			display dialog "Uz existuje zaloha"
		end if
	end tell
	-- ide o iny datum a robime len inkrementalnu zalohu
else
	-- nazov suboru vytvorime vo formate increment_yyyymmdd
	set fname to "increment_" & (year of (current date) as string) & (month of (current date) as integer as string) & day of (current date) as string
	tell application "Finder"
		-- nacitame vsetky subory, ktore boli zmenene dnes
		set subory_hart to every file of entire contents of folder "Macintosh HD:Users:jann:Documents:Projekty:hart:" whose modification date is greater than (current date) - 1 * days
		-- ak sme nasli, tak vytvarame zlozku a skopirujeme subory
		if subory_hart as string is not equal to "" then
			-- nastavime si cielovu lokaciu
			set dp to "Macintosh HD:Users:jann:Dropbox:Projekty:Zaloha:" as string
			-- zlozime vyslednu cestu
			set ck to dp & fname & ":"
			
			-- zistime ci nahodou uz subor s tymto nazvom neexistuje
			if not (exists folder ck) then
				make new folder at dp with properties {name:fname}
				duplicate subory_hart to ck
			else
				display dialog "Uz existuje zaloha"
			end if
		end if
	end tell
end if

--nakoniec vymazeme stare zalohy
tell application "Finder"
	delete (every item of folder "Macintosh HD:Users:jann:Dropbox:Projekty:Zaloha:" whose modification date is less than (current date) - 30 * days)
end tell
display dialog "Zaloha ukoncena"

Popis skriptu

V prvom kroku zistíme, či aktuálny deň je pondelok.
Pokiaľ je pondelok, tak si do premennej fname nastavím názov výsledného súboru. Do premennej dp nastavím cieľovú zložku (samotné cesty k súborom budú u vás samozrejme rozdielne), do ktorej vložíme našu zálohu. Cieľom je v tomto prípade interná zložka Dropboxu, ktorá ak beží služba Dropboxu, sa automaticky synchronizuje.
Obe premenné spojíme v jednej premennej ck.
Príkazom tell application "Finder" uvedieme do chodu správcu súborov. Pomocou neho overíme, či požadovaná zložka už neexistuje. Ak nie, môžeme do nej prekopírovať obsah zložky s naším projektom.

Druhá hlavná vetva skriptu slúži na inkrementálne zálohy. Podobne ako pri full zálohe si nastavíme názov súboru, kam pôjde záloha. Opäť zavoláme finder a do premennej subory_hart nastavíme cestu všetkých súborov, ktoré boli zmenené posledný deň. Ak premenná niečo obsahuje, môžeme pokračovať v zálohovaní. Nastavíme si cieľovú zložku, kam pôjde záloha. Overíme, že ešte neexistuje. Ak neexistuje, tak ju vytvoríme a nakopírujeme do nej všetky zmenené súbory.

Na koniec skriptu som si vytvoril ešte automatické mazanie záloh, ktoré sú staršie ako 30 dní. Zálohy sa mažú bez rozdielu toho, či ide o full alebo inkrementálnu zálohu.

Scheduling

Skript po dokončení uložíme. Môžeme ho uložiť ako skript alebo ako aplikáciu. V oboch prípadoch ho môžeme následne zavesiť do kalendárovej aplikácie iCal. Tá sa postará potom o scheduling - pravidelné spúšťanie.

Po spustení iCal vytvoríme nový event. Typ alarmu je potrebné nastaviť na "Run script" alebo "Open file" podľa toho, či máme našu prácu uloženú ako skript alebo ako aplikáciu. Ostatné nastavenia eventu sú bežné nastavenia. Teda dátum a čas vykonania, počet opakovaní ako aj spôsob opakovania.

7457-obrazok-5-png

V prílohách nájdete celý súbor so skriptom, aby ste ho nemuseli kopírovať z článku.

Komentář k článku

1 Zadajte svou přezdívku:
2 Napište svůj komentář:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět na články