문제

이 사이트의 대부분의 사람들이 꼬리에 익숙하다고 생각합니다. 그렇지 않은 경우 - 텍스트가 파일에 추가 될 때 Tail이 해당 문자를 터미널에 버린다는 "팔로우"모드를 제공합니다.

내가 찾고있는 것은 (그리고 필요한 경우 나 자신을 쓸 수 있음) 이진 파일에서 작동하는 꼬리 버전입니다. 기본적으로 다른 네트워크 링크에서 내려 오면 파일을 속이는 무선 링크가 있습니다. 꼬리 소스 코드를 살펴보면 다시 쓰기가 어렵지는 않지만 바퀴를 재발 명하지 않을 것입니다! 전체 파일을 복사하기를 원하기 때문에 이것은 엄격하게 "꼬리"가되지는 않지만 새로운 바이트가 추가되어 스트리밍되는 것을 보게 될 것입니다.

아이디어?

도움이 되었습니까?

해결책

또한 있습니다 빈티일 앞서 언급 한 스크립트보다 더 강력한 응용 프로그램.

그만큼 빈티일 패키지에는 단일 응용 프로그램이 포함되어 있으며 빈티일. 이 프로그램은 디스크에서 일반 파일을 읽고 출력을 STDOUT, BYTE-BY-BYTE로 파이프합니다. 꼬리(1) 텍스트 파일을 수행합니다. 이는 WAV 파일과 같은 "테일링"바이너리 파일에 유용하며 실시간으로 작성되는 데 유용합니다. 이 앱은 진행중인 작업이지만 이미 저를 위해 설계된 작업을 수행합니다.

다른 팁

hexdump에 파이프 :

tail -f somefile | hexdump -C

Windows 용 급히 코딩 된 Python 스크립트가 도움이 될 수 있습니다.

# 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

그런 다음 누릅니다 shift F

엄밀히 말하면, 당신은이를 위해 프로그램을 작성해야합니다. tail 이진 파일에서 작동하도록 지정되지 않습니다. 가능한 빨리 새로운 "트리l 링"데이터를 수신하려면 피하고 싶은 버퍼링 문제도 있습니다.

Linux Coreutils Tail (1)은 이진 파일에서 잘 작동합니다. 대부분의 애플리케이션의 경우 데이터 구조의 중간에있는 임의의 지점에서 출력이 시작되지 않도록 라인 지향을 피해야합니다. 파일의 시작 부분에서 단순히 시작하여 다음을 수행 할 수 있습니다.

tail -c +1 -f somefile

잘 작동합니다.

이것은 꼬리가 아닙니다. 이것은 점진적으로 파일을 복사합니다. rsync를보십시오.

라이브 스트림에서도 작동 할 때 이것을 사용합니다.

cat ./some_file_or_dev | hexdump -C

샘플 내 키 프레스 (및 릴리스)를 덤핑합니다.

[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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top