Como iniciar automaticamente um script de shell quando o conteúdo de um determinado diretório é alterado

5

Estou desenvolvendo um projeto web usando algumas bibliotecas que me forçam a lançar um comando shell para compilar alguns arquivos toda vez que eu os modifico.

Esta tarefa é obviamente cansativa e estou procurando algum script para lidar com isso (estou no OSX).

Existe uma maneira de iniciar automaticamente um script de shell quando o conteúdo de um determinado diretório (+ subdirs) é alterado?

    
por systempuntoout 30.08.2010 / 08:32

4 respostas

5

O Mac OSX tem duas APIs de notificação do sistema de arquivos: kqueue e FSEvents . Eu não sei sobre comandos que lhe dão acesso a eles sem programação. Existe uma ligação de python para FSEvents .

Veja também Veja o acesso ao sistema de arquivos em tempo real Mac OS X .

Dado o que você está tentando fazer, convém tentar uma abordagem diferente: em vez de acionar uma recompilação quando os arquivos de origem foram modificados, acione uma recompilação quando os arquivos compilados forem solicitados (usando make , portanto que nada é realmente recompilado se os arquivos de origem não forem alterados). Isso pode ser muito caro se você tiver que fazer isso para todas as solicitações para um site, no entanto; referência para descobrir.

    
por 30.08.2010 / 21:10
1

O comando BSD wait_on baseado no kqueie é disponível no MacPorts , fornece exatamente o que você precisa.

The wait_on command allows shell scripts to access the facilities provided by kqueue(3). This allows scripts to detect files being added to directories, data appended to files and many other things - all without polling.

No Linux, eu usaria incron , INotify Cron.

    
por 30.08.2010 / 10:12
1

Guard - é uma ferramenta robusta de plataforma cruzada para observar diretórios (não apenas arquivos) e executar comandos sempre que arquivos são adicionados, modificado ou excluído.

Ele lida com uma massa de problemas relacionados à observação de arquivos, tanto problemas específicos de OSX quanto de arquivos / diretório em geral.

Também é simples de configurar e executar, e usa a biblioteca Listen para assistir arquivos.

    
por 04.07.2015 / 14:22
0

Não é verdade, mas você pode se aproximar. Você pode escrever um script que verifique se os arquivos em um diretório foram alterados (provavelmente verificando-os em um arquivo em algum lugar) e, em caso afirmativo, construí-los.

Em seguida, você pode definir o cron para executar este script a cada 10 minutos, para que você saiba que seu material não tem mais de 10 minutos.

    
por 30.08.2010 / 09:00