Pergunta

Eu acho que a maioria das pessoas neste site estão familiarizados com a cauda, ??se não -. Ele fornece uma "seguir" o modo que à medida que o texto é anexado à cauda ficheiro vai despejar esses personagens para o terminal

O que eu estou procurando (e possivelmente para escrever-me se necessário) é uma versão de cauda que funciona em arquivos binários. Basicamente, eu tenho uma ligação sem fios que eu gostaria de pingar um arquivo em como ele vem para baixo de outra ligação de rede. Olhando sobre o código fonte de cauda que não seria muito difícil para reescrever, mas prefiro não reinventar a roda! Isso não seria estritamente "cauda" como eu gostaria todo o arquivo a ser copiado, mas seria ver como foram adicionados novos bytes e transmitir os.

Idéias?

Outras dicas

canalizá-lo para hexdump:

tail -f somefile | hexdump -C

Este script Python apressadamente codificado para Windows pode ser de ajuda:

# bintail.py -- reads a binary file, writes initial contents to stdout,
# and writes new data to stdout as it is appended to the file.

import time
import sys
import os
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

# Time to sleep between file polling (seconds)
sleep_int = 1

def main():
    # File is the first argument given to the script (bintail.py file)
    binfile = sys.argv[1]

    # Get the initial size of file
    fsize = os.stat(binfile).st_size

    # Read entire binary file
    h_file = open(binfile, 'rb')
    h_bytes = h_file.read(128)
    while h_bytes:
        sys.stdout.write(h_bytes)
        h_bytes = h_file.read(128)
    h_file.close()


    # Loop forever, checking for new content and writing new content to stdout
    while 1:
        current_fsize = os.stat(binfile).st_size
        if current_fsize > fsize:
            h_file = open(binfile, 'rb')
            h_file.seek(fsize)
            h_bytes = h_file.read(128)
            while h_bytes:
                sys.stdout.write(h_bytes)
                h_bytes = h_file.read(128)
            h_file.close()
            fsize = current_fsize
        time.sleep(sleep_int)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        main()
    else:
        sys.stdout.write("No file specified.")

less somefile

Depois de imprensa shift F

Estritamente falando, você precisa escrever um programa para fazer isso, como tail não é especificado para trabalhar em arquivos binários. Há também tamponamento questões que você provavelmente vai querer evitar se você quiser receber o novo "escorria" dados o mais rápido possível.

cauda Linux coreutils (1) funciona muito bem em arquivos binários. Para a maioria das aplicações, você só precisa evitar a sua linha de orientação, de modo que a saída não começar em algum lugar aleatório no meio de uma estrutura de dados. Você pode fazer isso simplesmente começando no início do arquivo, que também é exatamente o que você pediu:

tail -c +1 -f somefile

funciona muito bem.

Este não é cauda - isto é copiar progressivamente um arquivo. Olhada rsync.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top