Script Bash para monitorar o comando change e execute file

0

Eu tenho uma pasta com várias subpastas, essas pastas têm asciidoctor arquivos formatados com extensão .adoc .

Sempre que faço alterações nos arquivos (o que é frequente), preciso executar

asciidoctor -q filename.adoc

para compilá-lo em formato HTML.

Estou tentando automatizar o processo. até agora eu vim com isso usando entr :

ls *.adoc | entr asciidoctor -q *.adoc

mas funciona apenas com a pasta existente e não para subpastas. Eu tentei essa variação, mas não funciona:

find . -name '*.adoc' | entr asciidoctor -q *.adoc

Alguma idéia de como eu poderia implementar esse processo automatizado para todas as subpastas?

    
por bran 01.09.2016 / 11:55

3 respostas

0
  1. Pesquise por arquivos * * adoc
  2. Teste se filename.adoc for mais recente que filename.html
  3. se assim for, execute asciidoctor sobre ele

    find . -name '*.adoc' | while read FILE; do [ "${FILE}" -nt "${FILE%adoc}html" ] && asciidoctor -q "${FILE}" ; done
    

ou coloque um script:

#! /bin/bash
find . -name '*.adoc' | while read FILE; do
    if [ "${FILE}" -nt "${FILE%adoc}html" ]; then
        asciidoctor -q "${FILE}"
    fi
done

A linha única ou o script pode ser executado a partir do crontab a cada minuto:

crontab -e

adicione uma linha

* * * * * /home/joe/update_adoc.bash
    
por 01.09.2016 / 13:34
1

Antes de começar a fazer alterações, ofereço-lhe para fazer o registro de data e hora, por exemplo,

touch time.stamp.file

Após a edição, você pode encontrar todos os arquivos alterados por

find . -name '*.adoc' -newer time.stamp.file -exec asciidoctor -q {} +
    
por 01.09.2016 / 12:09
0

Isso pode ser feito usando a ferramenta opensource monit !

Vamos adicionar o seguinte ao /etc/monit.conf :

check file test with path /path/tp/test
    if changed checksum then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id


Devemos nos certificar de que o usuário com a_user_id as id tenha privilégios suficientes para o /path/to/test e o arquivo /path/to/script.sh ler, executar privilégios para monit.conf

Quando alteramos monit daemon
então como root:

monit reload 

para obter as alterações no monit

watch monit status 

pode mostrar alterações no relatório /path/to/test quando um evento é acionado

Por exemplo, neste exemplo
quando alteramos o conteúdo do arquivo monit o script /path/to/script.sh será invocado

Por padrão %code% acorda a cada 30 segundos e faz as verificações configuradas na

Para verificar se há um novo arquivo adicionado a um diretório ou um arquivo em um diretório que está sendo alterado:

check directory test2 with path /path/to<br/>
      if changed timestamp then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id

Acredito que essa configuração pode ser facilmente atualizada para atender às necessidades do seu aplicativo!

    
por 01.09.2016 / 14:03

Tags