如何将文本流传输到文件中,当文件仍然正在使用时,请将其擦除以便轮换作业?
长版:
我一直在努力解决一个显然很小的问题,这让我的实验无法继续下去。
我有一个软件从外部硬件(radiotelescope项目)连续收集数据并以csv格式存储。作为远程位置的安装,我会每天一次将保存的数据复制到一个安全的地方并擦除文件内容,同时,出于同样的原因,我不能停止硬件/软件,因此软件如日志旋转不会是一种选择。
花费尽可能多的精力see my previous post,似乎被擦除的文件仍在增长,尽管是空的。
奇怪的行为,显示文件大小,截断文件,再次显示文件大小:
pi@tower /media/data $ ls -la radio.csv ;ls -s radio.csv;truncate radio.csv -s 1; ls -la radio.csv ;ls -s radio.csv
-rw-r--r-- 1 pi pi 994277 Jan 18 21:32 radio.csv
252 radio.csv
-rw-r--r-- 1 pi pi 1 Jan 18 21:32 radio.csv
0 radio.csv
然后,只要有更多数据进入:
pi@tower /media/data $ ls -la radio.csv ;ls -s radio.csv
-rw-r--r-- 1 pi pi 1011130 Jan 18 21:32 radio.csv
24 radio.csv
我想把输出管道输入到sed命令并立即保存,完全没有运气。此外,文件系统/硬件似乎没有错误(尝试了不同的硬件/发行版/文件系统)。
有人会很高兴给我一个提示如何继续吗?
提前谢谢。
答案 0 :(得分:1)
使用tee
选项加密到-a
。该文件由原始来源保持打开状态。
tee
的选项APPEND有助于坚持EOF新数据;在给定的问题中,当文件归零时附加到开头。
对于搜索引擎和将来的参考:
sudo rtl_power -f 88M:108M:10k -g 1 - | tee -a radio.csv -
现在用
清空文件echo -n > radio.csv
按预期将文件归零。