sed - 尽管内容已清空,但打开的文件仍在不断增长

标签 sed filesize

如何将文本流通过管道传输到文件中,并在文件仍在使用时删除它以进行作业轮换?


长版:

一段时间以来,我一直在努力解决一个看似微不足道的问题,这让我的实验无法继续进行。

我有一个软件不断从外部硬件( 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/

相关文章:

regex - 为 html 文件中的所有媒体链接添加前缀

linux命令行文本文件操作

sed - 如何更改 sed 认为的行分隔符

c++ - 如何在 C++ 中减小 fstream 文件的大小

c - 如何寻找到文件末尾来确定文件大小?

ios - App Store 是否会从 IPA 中删除架构?

node.js - 当 req body json 太重时 ExpressJS CORS 错误

jquery - 使用 jQuery 查找下载链接后面的文件大小

linux - 如何在 Linux 中删除文件中的特定重复字符串

linux - sed 行间模式匹配