Eu tenho um arquivo chamado file1 que eu quero em um script, sempre que houver uma alteração nele, faça alguma coisa, um bipe soará. Como faço isso?
8
Eu tenho um arquivo chamado file1 que eu quero em um script, sempre que houver uma alteração nele, faça alguma coisa, um bipe soará. Como faço isso?
Se você inotify-tools
instalou (pelo menos esse é o nome do pacote no Debian) quando você pode fazer algo assim:
while inotifywait -q -e modify filename >/dev/null; do
echo "filename is changed"
# do whatever else you need to do
done
Isso aguarda o evento "modify" acontecer com o arquivo chamado "filename". Quando isso acontece, o inotifywait
comando sai filename MODIFY
(que descartamos enviando a saída para / dev / null) e depois termina, o que faz com que o corpo do loop seja inserido.
Leia a página de manual inotifywait
para mais possibilidades.
while
. Observe também que o que um humano considera uma "modificação" nem sempre funciona: isso trará um acréscimo, por exemplo, mas não capturará um editor comovim
(o arquivo assistido é renomeado ou trocado por um backup), nemperl -i
(in-loco editar) que substitui o arquivo por um novo. Uma vez que um desses aconteça,inotifywait
nunca mais retornará. Assistir a um inode e assistir a um nome de arquivo não é a mesma coisa, portanto, depende do caso de uso.move_self
, pegará renomeados. Veja a página de manual para obter uma lista completa dos eventos.Sem inotifywait, você pode usar este pequeno script e um trabalho cron (a cada minuto ou mais):
fonte
Veio à procura de uma linha no MacOS. Resolvido no seguinte. Compilei e adicionei essa ferramenta ao meu caminho. Isso levou menos de 30 segundos.
Em seguida, fui ao diretório em que desejava assistir. Nesse caso, eu gostaria de assistir a um arquivo de remarcação para alterações e, se alterado, a
make
.É isso aí.
fonte
brew install kqwait
e você pode passar vários arquivos a ele comokqwait **/*
Você provavelmente não precisa comparar o md5sum se tiver o utilitário diff disponível.
a ! nega, por exemplo, true se a declaração for falsa
Advertência é que você precisa do arquivo original para comparar com o diff, que (imo) é o mesmo que o script md5sum está fazendo acima.
fonte
diff -q
, se fordiff
compatível.-q
significa "relatar se apenas os arquivos diferem", não como eles diferem. Portanto,diff -q
para de comparar o momento em que uma diferença é vista, o que pode ser muito útil em termos de desempenho. Veja a documentação do GNU , por exemplo. Se todo o ponto de sua resposta estiver sendo eficiente por não usarmd5sum
, o não uso,diff -q
se disponível, está derrotando esse ponto.Você pode experimentar
entr
a ferramenta de linha de comando, por exemplofonte
entr
precisa ser instalado ou, pelo menos, é o caso do Ubuntu. Ele deve estar presente na maioria dos repositórios de distorções existentes no mercado.se você estiver verificando alterações em um repositório git, poderá usar:
fonte
uma.
cp orginalfile fileneedto_be_changed
'(Precisa fazer apenas uma vez)b.
fonte