Uma ideia seria usar o stdout
gerado pelo Unison enquanto ele estiver em execução. Existe algum lixo em stdout
que o Unison usa para criar um efeito dinâmico no terminal enquanto ele está "procurando por mudanças". Este lixo eletrônico pode ser removido facilmente excluindo cada linha contendo um caractere Carriage Return (CR) (no vim isso seria algo como :%s/^.*^M.*$\n//g
onde ^M
é digitado pressionando Crtl + V então Crtl + M ). O resultado parece algo como
<---- new dir bar/foo/newdir
deleted ----> bar/user/oldfile1
deleted ----> bar/user/oldfile2
<---- new file foobar/test/quiz.txt
<---- changed foobar/test/quiz.txt
Isso é muito mais facilmente analisado do que o log padrão do Unison.
Uma idéia melhor é esquecer a análise da saída do Unison e usar inotifywait
. Você pode configurar inotifywait
para assistir a um determinado diretório e relatar quaisquer arquivos que foram alterados, movidos, criados, etc.
inotifywait --event modify,attrib,move,create,delete \
--daemon \
--outfile /path/to/output.log \
--recursive \
--quiet \
--format %w%f \
'/watch/directory/'
Isso executará inotifywait
como um daemon e produzirá uma lista muito agradável e continuamente atualizada ( output.log
) dos caminhos absolutos de todos os arquivos em /watch/directory/
nos quais um dos eventos especificados ocorreu. Você provavelmente precisará alterar os eventos fornecidos e / ou utilizar a opção --exclude
para obter exatamente a lista de arquivos que deseja sincronizar com o S3.