Como assistir a um arquivo grande para alterações que podem ocorrer em qualquer lugar?

1

Gostaria de assistir a um arquivo em busca de alterações que possam ocorrer. Normalmente, usar tail -f file ou watch -d cat file seria bom para isso. No entanto, a file que estou monitorando é muito grande para caber em uma tela, e as alterações não ocorrem necessariamente em um local específico (por exemplo, o final).

Como posso observar alterações? Idealmente, gostaria de algo como watch -d cat file que rola para que pelo menos uma alteração seja visível na tela.

Se você está se perguntando para que serve isso, estou usando o lítio para minimizar um arquivo grande, e eu gosto de observe seu progresso, pois o processo de minimização geralmente revela dicas sobre o bug subjacente.

    
por Ed McMan 21.01.2017 / 18:34

2 respostas

1
watch=/path/to/file
tmp="$watch".$$
cp "$watch" "$tmp".1
while true; do
    clear
    cp "$watch" "$tmp".2
    diff -u "$tmp".1 "$tmp".2
    mv "$tmp".2 "$tmp".1
    sleep 10
done

Se você está preocupado com o espaço e / ou o tempo necessário para essas cópias de todo o arquivo, você deve perceber que não há realmente nenhuma maneira de contornar isso para implementar seus requisitos. watch -d também precisa manter a última saída para compará-la com a atual.

    
por 21.01.2017 / 20:20
0

Buscar o arquivo com um loop infinito é uma má ideia. Meu conselho é instalar o nodejs e usar fs.watchFile .

fs.watchFile('message.text', (curr, prev) => {
  console.log('the current mtime is: ${curr.mtime}');
  console.log('the previous mtime was: ${prev.mtime}');
});

Se você quiser um comando de uma linha para o terminal, faça algo assim.

node -e "fs.watchFile('message.text', (curr, prev) => {
  console.log('the current mtime is: ${curr.mtime}');
  console.log('the previous mtime was: ${prev.mtime}');
});"
    
por 21.01.2017 / 20:32

Tags