Eu tenho uma pasta com um monte de subpastas, essas pastas foram asciidoctor
formatadas arquivadas com .adoc
extensão.
Toda vez que faço alterações nos arquivos (o que geralmente ocorre), preciso executar
asciidoctor -q filename.adoc
para compilá-lo no 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, não nas 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?
command-line
bash
filesystem
Farelo
fonte
fonte
Respostas:
O Linux fornece uma interface agradável para monitorar todos os eventos do sistema de arquivos, como criar, modificar e remover arquivos. A interface é uma
inotify
família de chamadas do sistema, os utilitários de espaço do usuário que utilizam essas chamadas são fornecidos peloinotify-tools
pacote no Ubuntu (disponível no repositório do universo). Se você ainda não o possui, instale por:inotify-tools
forneceinotifywait
einotifywatch
binários, precisamos do primeiro.Portanto, você deseja executar o comando
asciidoctor -q some_file
quando qualquer.adoc
arquivo for modificado (some_file
será substituído por isso); se houver, assumindo que seus.adoc
arquivos estão no diretório/foo/bar
, você pode definir o relógio:-q
ativa o modo silencioso, sem informações porinotifywait
si só-m
ativa o modo monitor, caso contrário, ele será encerrado após o primeiro evento--event modify
, estamos interessados apenas nomodify
evento, ou seja, quando um arquivo é modificado. Outros valores possíveis incluemopen
,close
etc.--format %w
, queremos apenas o nome do arquivo modificado em vez de várias outras informações, pois usaremos o nome do arquivo como entrada para outro comando/foo/bar/*.adoc
será expandido para todos os.adoc
arquivos no/foo/bar
diretórioAgora, o acima mostrará o nome do arquivo sempre que qualquer um for modificado, agora para executar o comando no nome do arquivo (assumindo que o comando receba argumentos via STDIN):
Você também pode configurar uma inspeção recursiva no diretório, depois precisará usar
grep
para filtrar apenas os arquivos desejados. Aqui, configure o relógio recursivamente (-r
) no diretório/foo/bar
e use-ogrep
para filtrar apenas.adoc
arquivos:Ao assistir aos diretórios, o especificador de formato de saída é
%w
resolvido para o nome do diretório, portanto, precisamos%f
obter o nome do arquivo. Enquanto assistia arquivos,%f
resolveria esvaziar a string.Observe que, você também pode executar
inotifywait
no modo daemon (-d
), também pode escrever a coisa toda e / ou executar em segundo plano e / ou brincar com ela mais outras opções.Além disso, você pode substituir
asciidoctor
por qualquer outro comando de sua escolha, se desejar.Marque
man inotifywait
para ter mais ideia.fonte
Usar
inotifywait
é a abordagem típica, mas também há um utilitário separado chamadoinotify-hookable
que permite executar um comando quando um arquivo (ou diretório) é alterado:Parece sair depois de disparar o comando uma vez; Não vejo uma opção para assistir continuamente, então você pode fazer algo como:
Observe que existem opções para monitorar vários arquivos ou um diretório, recursivamente, e opções para ignorar arquivos / caminhos.
fonte
sudo apt-get install inotify-hookable
Existem muitas ferramentas por aí, especialmente se você pesquisar no seu repositório
o que nos dá muitas ferramentas. Mas você não precisa testá-los porque eu fiz isso.
Eu testei essas ferramentas e muitas outras:
Entre essas ferramentas, encontrei três delas úteis e confiáveis:
E entre esses três, o direvent é o melhor, sem dúvida.
É tão útil e confiável de usar que usei para um pipeline simples com meus microsserviços que tenho.
direvent.conf
arquivo para assistirEste é apenas um dos arquivos de configuração que eu tenho e, sempre que há uma alteração na gravação , esse comando é executado - o que também pode ser um script bash .
Não há necessidade de usar
while
loop ou outras coisas.recursos
Desenvolvido por Sergey Poznyakoff .
Instalando
Mas instalá-lo usando seu código-fonte é bastante fácil e direto, o que fornece a última versão (agora é: 5.1).
fonte
Bem, eu recomendo o seguinte.
fonte