Monitore uma pasta OSX para alterações de arquivo e execute um script bash [duplicado]

10

Possível duplicação:
Assista ao sistema de arquivos em tempo real no OS X e Ubuntu

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

Alguma ferramenta de recomendação para monitorar um diretório para alterações de arquivo e depois acionar uma ação, ou seja, um script bash?

Tegan Snyder
fonte
11
Esta pergunta no estado em que se encontra é uma recomendação de software, que geralmente não é permitida no Superusuário . Tente reformulá-lo para fazer sua pergunta raiz: "Como posso confirmar automaticamente as alterações e enviar a partir de um repositório git sempre que os arquivos são adicionados / excluídos / alterados?"
Darth Android
@ DarthAndroid, de acordo com o FAQ, esta pergunta é boa como está. O OP não está pedindo conselhos para fazer compras ou comprar.
ephsmith
11
@eph O OP está pedindo recomendações para algo, o que é bastante fora de tópico. O principal problema, porém, é que eles não estão explicando o problema e pedem apenas a tentativa de solução.
Slhck
O problema é simples. Monitore um diretório para alterações e confirme essas alterações em um repositório. Está tudo na pergunta do OP. O link que você forneceu tem a resposta. Boa decisão.
ephsmith

Respostas:

19

Usando o fswatch do seu repositório:

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

Este exemplo simples capturaria apenas alterações nos arquivos já existentes no repositório.

Pierre Carrier
fonte
Isso pode ser feito com ações de pasta integradas ao OS X. Veja a resposta no link fornecido pelo slhk acima.
ephsmith
11
Você pode expandir sua resposta adicionando um exemplo explicando o que o OP deseja alcançar. A publicação de um link não é incentivada.
Slhck 07/07/2012
Isso parece encorajador. I pensar que eu poderia correr ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder
+1 - Tentei fswatchdepois de ler sua resposta. Excelente utilidade - muito semelhante ao inotifyde linux e faz uso de OS X nativafsevent
cwd
2

Uma opção seria usar apenas o launchd. Salve uma lista de propriedades como esta ~/Library/LaunchAgents/com.superuser.445907.pliste carregue-a com launchctl load ~/Library/LaunchAgents/com.superuser.445907.plistou saindo e fazendo login novamente.

<?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 registra apenas as alterações nos arquivos quando elas são salvas atomicamente ou excluídas e recriadas toda vez que são salvas. A maioria dos aplicativos OS X realiza salvamentos atômicos por padrão, mas, por exemplo, TextMate e vim não. Alterações nas subpastas das pastas monitoradas não são detectadas.

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

Veja man launchde man launchd.plistpara mais informações.

Lri
fonte
Abordagem interessante. Vou dar uma olhada e voltar para você. Obrigado pelo feedback.
Tegan Snyder
Este método definitivamente tem suas limitações. Você não pode detectar alterações nas subpastas das pastas monitoradas. Essa técnica também não informa qual arquivo teve um evento (novo arquivo, modificação, exclusão etc.) - apenas que o caminho teve um evento.
Volomike 23/03