Linux
tail -f 沒有尾巴?
Solaris 中是否有一個命令來讀取文件,並且當它到達末尾時以 tail 的方式流式傳輸?我需要從頭開始讀取文件,它是一個二進製文件。
將不勝感激有關 Solaris 和 Linux 的資訊。
tail -9999f
會做一些接近你想要的事情。如果您的文件更大,請添加更多 9。問題:
- 二進製文件可能沒有換行符。
tail -f
在列印任何內容之前將等待換行符。- Solaris 上的版本
tail
(您沒有提到哪個Solaris,但可能沒關係)可能不支持該選項。它可能支持tail -n 9999 -f
. 您可能需要獲取 GNU 版本的 tail。- 由於文件不斷增長,因此在找出文件大小和啟動尾部程序之間存在競爭條件。如果您不要求它獲得足夠的行數,您可能會錯過文件的開頭。
tail
不知道您何時真正完成了對文件的寫入,因此您的gzip
過程也永遠不會完成。我不確定當你ctrl-c
結束tail
程序時會發生什麼,但 gzip 很可能會自行清理並刪除它正在處理的文件。我的建議是啟動您的原始程序並將輸出通過管道傳輸到 gzip,如下所示:
./my_program | gunzip > new_file.txt
這樣,gunzip 會在執行
my_program
緩慢時等待,但在完成指示文件的真正結尾時仍會完成my_program
。您可能需要重寫程序以寫入 STDOUT 而不是直接寫入文件。
編輯:
查看手冊頁後,可以解決上述三個問題。使用
-c <bytes>
選項而不是-n <lines>
緩解問題 1. 使用-n +0
或-c +0
緩解問題 3.--pid=<PID>
當原始程序(執行方式)終止時,使用將使 tail 終止,<PID>
從而緩解問題 4。