Suporte Broadcast - Criando um Auto-Save usando AppleScript - Parte 2

No post anterior, mostrei como fazer um auto-save em AppleScript por "replace" de itens e/ou diretórios.

Nos testes que realizei funcionou bem, mas pensei o seguinte: Por que ao invés de "replace" não ser um "merge" (mesclar)?

Pesquisei em muitas páginas e fóruns e notei o tamanho da escassez que existe sobre conteúdos que falam sobre AppleScript. Até achei uma solução bacana no GitHub, nesse link, mas para o que eu quero, logo percebi que poderia fazer algo muito mais simples.

Tudo que o script precisava fazer era chamar o "shell script" e usar o comando ditto, que mescla dois diretórios.

Segue abaixo o código da nova versão do programa

(*
Script: backup.scpt
Objetivo: Fazer autosave de uma pasta em outra
Autor: Alex Souza Marques
*)

set source to "Volumes/Dados/Final\\ Cut\\ Pro\\ Documents/Autosave\\ Vault" as string
set destiny to "Volumes/storage\\ fcpx/engenharia_teste" as string

if (list disks) does not contain "storage fcpx" then
     try
          mount volume "afp://10.21.200.101"
     on error
          display dialog "Storage FCPX nao Foi Encontrado"
     end try
end if

repeat
     delay 60 (*Tempo em segundos de um backup para o outro*)
     do shell script "ditto " & source & " " & destiny
end repeat


Diferentemente do programa anterior, esse está apenas usando, repetidamente, uma linha de comando do shell para mesclar duas pastas. Enquanto o outro copiava tudo novamente a cada iteração, nesse programa só é copiado os itens adicionados entre a iteração anterior (i-1) e a atual (i), ou que sofreram alterações.

Com isso, a eficiência do programa aumentou absurdamente, podendo ser feito auto-save em um intervalo de tempo bem menor.

Único problema que tive é que o programa não encerra normalmente, apenas quando forço o encerramento. Acredito que seja algum comando que precise ser adicionado dentro do "repeat". Encontrei muito exemplo usando o comando "quit" com alguns condicionais, mas ainda quando tento aplicar dá erro.

Tentei algo do tipo:

...
if close then quit
...

ou

...
on quit
      end repeat
end quit
...

E outras coisas do tipo, mas nada funcionou. Bem, isso não impediu o funcionamento do programa. Vou tentar descobrir isso e faço um post sobre o assunto. Até lá.

Comentários