Frage

würde ich die meisten Menschen auf dieser Seite erraten sind vertraut mit Schwanz, wenn nicht -. Eine „folgen“ Modus liefert, die als Text in die Datei Schwanz angehängt wird, werden diese Zeichen, um das Terminal-Dump

Was ich suche (und möglicherweise selbst wenn notwendig zu schreiben) ist eine Version des Schwanzes, der auf Binär-Dateien arbeitet. Im Prinzip habe ich eine drahtlose Verbindung, die Ich mag würde, eine Datei rieseln über, wie es nach unten von einer anderen Netzwerkverbindung kommt. Mit Blick auf den Quellcode Schwanz wäre es nicht allzu schwer zu umschreiben, aber ich würde lieber das Rad nicht neu erfinden! Dies wäre nicht streng sein „Schwanz“, wie ich die gesamte Datei kopiert werden möchte, aber es würde zusehen, wie neue Bytes wurden hinzugefügt und diejenigen streamen.

Ideen?

War es hilfreich?

Lösung

Es gibt auch die bintail Anwendung, die robuster zu sein scheint als die zuvor erwähnte Skript.

  

Das bintail Paket enthält eine einzelne Anwendung, bintail . Das Programm liest eine normale Datei von der Festplatte und Rohren der Ausgabe auf stdout, Byte-für-Byte, ohne Übersetzung, ähnlich wie Schwanz (1) hat in Textdateien. Dies ist nützlich für „Tailing“ binäre Dateien wie WAV-Dateien, während sie in Echtzeit geschrieben werden. Diese App ist ein work in progress, aber es hat schon, was es für mich zu tun entworfen.

Andere Tipps

Rohr es HexDump:

tail -f somefile | hexdump -C

Dieses hastig codiert Python-Skript für Windows kann hilfreich sein:

# 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

Dann drücken shift F

Genau genommen müssen Sie ein Programm schreiben, dies zu tun, als tail nicht angegeben ist auf binäre Dateien zu arbeiten. Es gibt Pufferung Probleme auch möchten Sie wahrscheinlich vermeiden, wenn Sie die neue erhalten möchten „getröpfelt“ Daten so schnell wie möglich.

Linux coreutils Schwanz (1) arbeitet auf Binär-Dateien in Ordnung. Für die meisten Anwendungen müssen Sie nur seine Line-Ausrichtung zu vermeiden, so dass die Ausgabe nicht in einem zufälligen Punkt in der Mitte einer Datenstruktur beginnen. Sie können das tun, indem Sie einfach am Anfang der Datei beginnen, die auch genau das, was Sie gefragt:

tail -c +1 -f somefile

funktioniert gut.

Dies ist kein Schwanz - das schrittweise eine Datei kopiert. Schauen Sie sich rsync.

Ich benutze dies, wie es bei Live-Streams funktioniert auch:

cat ./some_file_or_dev | hexdump -C

Proben Dumping meine Tastendrücke (und gibt):

[user@localhost input]$ sudo cat /dev/input/event2 | hexdump -C
00000000  81 32 b1 5a 00 00 00 00  e2 13 02 00 00 00 00 00  |.2.Z............|
00000010  04 00 04 00 36 00 00 00  81 32 b1 5a 00 00 00 00  |....6....2.Z....|
00000020  e2 13 02 00 00 00 00 00  01 00 36 00 01 00 00 00  |..........6.....|
00000030  81 32 b1 5a 00 00 00 00  e2 13 02 00 00 00 00 00  |.2.Z............|
00000040  00 00 00 00 00 00 00 00  81 32 b1 5a 00 00 00 00  |.........2.Z....|
00000050  a3 af 02 00 00 00 00 00  04 00 04 00 36 00 00 00  |............6...|
00000060  81 32 b1 5a 00 00 00 00  a3 af 02 00 00 00 00 00  |.2.Z............|
^C
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top