Monitora uma Pasta OSX para mudanças de arquivo e então executa um script bash [duplicado]

9

Estou procurando um método eficiente para monitorar um diretório local no OSX e, se algum arquivo tiver sido alterado nesse diretório, execute um script bash para enviar os arquivos para o github.

Qualquer ferramenta de recomendação para monitorar um diretório para alterações de arquivos e, em seguida, acionar uma ação, por exemplo, um script bash?

    
por Tegan Snyder 06.07.2012 / 23:09

2 respostas

17

Usando fswatch do seu repositório:

fswatch . 'git commit -avm "snapshot at ${date}"'

Este exemplo simples só detecta alterações em arquivos que já estão no repositório.

    
por 07.07.2012 / 02:47
2

Uma opção seria apenas usar o launchd. Salve uma lista de propriedades como ~/Library/LaunchAgents/com.superuser.445907.plist e carregue-a com launchctl load ~/Library/LaunchAgents/com.superuser.445907.plist ou fazendo logout e voltando.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

O Launchd só registra as alterações nos arquivos quando eles são salvos atomicamente ou excluídos e recriados sempre que são salvos. A maioria dos aplicativos do OS X realiza salvamentos atômicos por padrão, mas, por exemplo, o TextMate e o vim não. As alterações nas subpastas de pastas monitoradas não são detectadas.

launchctl unload $path && launchctl load $path aplica alterações a uma plist.

Veja man launchd e man launchd.plist para mais informações.

    
por 07.07.2012 / 17:24