如何将文本流通过管道传输到文件中,并在文件仍在使用时删除它以进行作业轮换?
长版:
一段时间以来,我一直在努力解决一个看似微不足道的问题,这让我的实验无法继续进行。
我有一个软件不断从外部硬件( radio 望远镜项目)收集数据并以 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 命令并立即保存,但完全没有运气。此外,文件系统/硬件似乎没有问题(尝试了不同的硬件/发行版/文件系统)。
有人会很友好地提示我如何继续吗?
提前谢谢你。
最佳答案
使用 -a
选项通过管道传输到 tee
。该文件由原始来源保持打开状态。
tee
的选项 APPEND 有助于坚持 EOF 新数据;在给定的问题中,当文件清零时追加到开头。
对于搜索引擎和 future 的引用:
sudo rtl_power -f 88M:108M:10k -g 1 - | tee -a radio.csv -
现在清空文件
echo -n > radio.csv
按预期将文件归零。
关于sed - 尽管内容已清空,但打开的文件仍在不断增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28124291/