如何通过 ssh 跟踪二进制文件?

How to tail a binary file over ssh?

我在远程机器上有一个自定义二进制格式的日志文件。我想将它与我本地机器上的文件同步,所以当新字节附加到远程二进制文件时,我本地机器上的文件也会更新。

我在这里了解了如何通过 ssh 使用 tailhttps://serverfault.com/questions/608723/tail-a-file-from-ssh-and-mirror-to-a-local-file

然后我在这里了解了如何在二进制文件上使用 tailBinary "tail" a file

我试着把它们组合成

ssh -t remotebox "tail -c +1 -f /path/to/file.bin" > ./mirror.bin

但后来我意识到 mirror.bin 已损坏。查看十六进制转储,我看到所有 0d0a 字节都被 t运行 分类到 0a 中(\r\n 仅被 \n 替换)。然而,如果我 运行 在本地尾巴 (tail -c +1 -f file1.bin > file2.bin),这个 t运行cation 不会发生。

我也试过用tee代替重定向;问题依然存在。

是否有 shell 我可以使用 tail 来防止这种情况发生的技巧,或者是否有其他程序可以满足我的需要?

谢谢。

P.S。远程和本地机器都是Linux, 运行ning bash.

以下重现了问题:

$ echo -e '123\r\n234\r\n' > /tmp/1
$ scp /tmp/1 server:/tmp/1
$ ssh -t server cat /tmp/1 > /tmp/2
Shared connection to closed.
$ diff /tmp/1 /tmp/2
1,3c1,3
< 123
< 234
< 
---
> 123
> 234
> 

有可能 ssh -t\r\n 更改为 \n,因为它可能会在线上执行 stty +igncr。我的 ssh -t 正好相反(我认为 stty +inlcr),我把字符加倍了:

$ ssh -t server cat /tmp/1 | hexdump -C
Shared connection to  closed.
00000000  31 32 33 0d 0d 0a 32 33  34 0d 0d 0a 0d 0a        |123...234.....|
0000000e
$ ssh server cat /tmp/1 | hexdump -C
00000000  31 32 33 0d 0a 32 33 34  0d 0a 0a                 |123..234...|
0000000b

无论如何。如果您不打算使用终端功能,请删除 -t 选项。

并且您的命令行提示您正在复制文件。我不知道为什么要为此使用 tail - tail 它用于输出文件的最后一部分,而不是用于打印整个文件...要打印整个文件使用 cat。要复制文件,请使用 scp.