executa o script na modificação do diretório

0

Para launchd , há WatchPaths (e, para alguns casos mais específicos, QueueDirectories ), que monitora as alterações em um caminho. No entanto, se for um diretório, ele reconhecerá apenas criações / exclusões no diretório, isto é, não o conteúdo alterado dos arquivos contidos ou quaisquer alterações em quaisquer subdiretórios (consulte aqui ).

(Para Linux, algumas boas soluções parecem estar listadas aqui .)

Parece que launchd não é capaz de fazer isso, é?

Eu poderia escrever meu próprio daemon sempre em execução que estende launchd por essa funcionalidade, via FSEvents (ou kqueue, fam ou gamin ?).

Ou existem projetos / ferramentas que podem fazer isso?

    
por Albert 09.10.2013 / 15:26

1 resposta

0

launchd também deve monitorar alterações em arquivos (diretamente) em diretórios em WatchPaths .

Tente salvar este plist como ~/Library/LaunchAgents/test.plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>test</string>
  <key>ProgramArguments</key>
  <array>
    <string>say</string>
    <string>a</string>
  </array>
  <key>WatchPaths</key>
  <array>
    <string>~/Documents/</string>
  </array>
</dict>
</plist>

Em seguida, execute launchctl load ~/Library/LaunchAgents/test.plist e modifique algum arquivo em ~/Documents/ . O programa deve ser executado mesmo se você modificar o arquivo sem executar um salvamento atômico ou mesmo se o tempo de modificação de ~/Documents/ não for alterado.

Observe que launchd não monitora alterações nos subdiretórios dos diretórios observados. A expansão Tilde funciona nos argumentos para WatchPaths por padrão, mas não há como ativar a expansão de nomes de arquivos. ( EnableGlobbing só se aplica a ProgramArguments .)

    
por 09.10.2013 / 16:21