Use o comando head ou similar para determinar quando os bytes mudam em um arquivo

2

Se usarmos o comando tail, poderemos ouvir eventos que representam alterações no tamanho dos arquivos (em bytes).

Estou procurando uma maneira de ouvir eventos quando o conteúdo do arquivo é alterado, mas a duração é a mesma. Especificamente, procurando ouvir alterações na primeira ou segunda linha do arquivo.

(Podemos esperar que o comando head possa fazer isso, mas não parece que o comando head pode ouvir as alterações, ele simplesmente captura o início do conteúdo.)

Alguém sabe se é possível ouvir alterações no conteúdo de um arquivo (o início do arquivo especificamente)?

Observe que há um processo anexando dados ao arquivo e outro processo lendo e removendo a primeira linha do arquivo.

Estou interessado em ouvir de forma independente alterações no cabeçalho do arquivo, mas não quero capturar, ou quero filtrar os eventos que são anexados ao arquivo.

    
por Alexander Mills 30.01.2017 / 10:01

1 resposta

2

Talvez algo assim:

#!/bin/bash

while true; do
    diff -q <(head -n 1 fileA.txt) <(head -n 1 fileB.txt)
    sleep 5
done

Considerando esses dois arquivos ( fileA.txt e fileB.txt ):

cat fileA.txt fileB.txt 
foo
bar

foo
bar

Quando altero a linha primeiro em fileA.txt :

cat fileA.txt 
fooo
bar

Eu recebo esta saída do script:

./checkFirst.sh 
Files /dev/fd/63 and /dev/fd/62 differ
Files /dev/fd/63 and /dev/fd/62 differ
Files /dev/fd/63 and /dev/fd/62 differ
Files /dev/fd/63 and /dev/fd/62 differ

Se eu alterar a linha segunda , nada acontece no script, apenas continua em loop:

cat fileA.txt 
foo
barbara

Testado com o Mac OS X 10.11.6 e:

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
    
por 30.01.2017 / 14:38