Existe um equivalente 'tail -f' para quando um arquivo é sobrescrito (em vez de anexado)?

6

Como monitorar continuamente um arquivo que está sendo continuamente sobrescrito? Especificamente, o arquivo contém uma única linha de texto que um processo em segundo plano está abrindo e reescrevendo repetidamente.

Esperava que tail -F funcionasse, mas não funciona.

Atualização : eu esperava que isso não fosse pertinente, mas estou executando o Mac OS X 10.5.8.

    
por Daryl Spitzer 25.02.2010 / 17:39

5 respostas

5

Você pode usar o relógio para repetir a execução de um comando, portanto, no seu caso

watch -n 1 cat filename
    
por 25.02.2010 / 17:50
1

Existem maneiras melhores de fazer isso, mas funciona

  while true ; do echo -n "'date +%s:' " >> file.log ; cat file >> file.log  ; done 

O arquivo file.log irá crescer ... rapidamente ...

Se você precisar de mais recursos, como verificar se o conteúdo do arquivo é igual ao conteúdo anterior, expanda-o em um script. Apenas comente abaixo e eu ajudo.

    
por 25.02.2010 / 18:23
1

Em sistemas BSD (e acredito que a maioria dos outros sistemas) tail -f será redefinido para o início do arquivo se ele ver que o arquivo foi truncado (isso soa exatamente como o comportamento desejado).

Nos sistemas Linux, o mesmo acontece, mas pelo menos na caixa Debian eu tenho um "intervalo de sondagem", então você precisa dizer para ele não dormir entre verificações do arquivo ( tail -s 0 -f ... ) para para notar o truncamento, caso contrário coisas estranhas acontecem (se o arquivo é do mesmo tamanho ou menor quando está escrito você não obtém saída, se é maior você obtém tudo após o marcador atual de contagem de bytes da cauda, etc. cauda de impementação para ver como ela se comporta)

Como uma alternativa nos sistemas Linux e BSD, a cauda tem uma opção -F (que é como -f , mas verifica se o arquivo foi girado - ou seja, o nome aponta para um número de inode diferente). Isso não ajudará se o arquivo estiver sendo truncado, em vez de desvinculado e substituído.

    
por 25.02.2010 / 18:26
1

Coorquinho watch :

while true
do
    clear
    cat file
    sleep 1
done

Altere o cat se o arquivo for maior que uma tela para algo como:

tail -n $((LINES - 4)) file

Você pode adicionar condicionais para verificar uma alteração no registro de data e hora do arquivo, etc.

    
por 25.02.2010 / 19:28
0

Você pode usar a API do FSEvents e um pequeno script para monitorar o arquivo (ou, mais precisamente, o diretório que contém o arquivo arquivo).

    
por 26.02.2010 / 11:55