【发布时间】:2021-03-02 08:53:32
【问题描述】:
我在远程机器上有一个自定义二进制格式的日志文件。我想将它与我本地机器上的文件同步,所以当新字节附加到远程二进制文件时,我本地机器上的文件也会更新。
我在这里了解了如何通过 ssh 使用 tail:https://serverfault.com/questions/608723/tail-a-file-from-ssh-and-mirror-to-a-local-file
然后我在这里了解了如何在二进制文件上使用tail:Binary "tail" a file
我尝试将它们组合成
ssh -t remotebox "tail -c +1 -f /path/to/file.bin" > ./mirror.bin
但后来我意识到mirror.bin 已损坏。查看十六进制转储,我看到所有0d0a 字节都被截断为0as(\r\n 被\n 替换)。但是,如果我在本地运行 tail (tail -c +1 -f file1.bin > file2.bin),则不会发生这种截断。
我也尝试使用tee 代替重定向;问题依然存在。
是否有我可以使用 tail 执行的 shell 技巧来防止这种情况发生,或者是否有其他程序可以满足我的需求?
谢谢。
附:远程和本地机器都是 Linux,运行 bash。
【问题讨论】:
-
是否有两个不同的系统涉及不同的行尾(例如 Linux 和 Windows)?
-
@ThomasSablik 不,两者都是 Linux。我已将其添加到说明中。
-
你应该在 Serverfault 或 Unix/Linux 上问这个问题。与编程无关。
-
我认为问题在于
tail和tee专注于文本。因此行尾被转换。如果有二进制选项,您可以查看文档。 -
@ThomasSablik 感谢您的建议,我已经在 Unix/Linux 上发布了这个问题。问题是本地机器上的tail没有这个问题,所以我怀疑SSH中的某些东西是罪魁祸首。