Sed 打开的文件不断增长,尽管内容已清空

Sed 打开的文件不断增长,尽管内容已清空,sed,filesize,Sed,Filesize,如何将文本流导入文件,并在文件仍在使用时,将其擦除以进行作业轮换 长版本: 我在一个显然很小的问题上挣扎了一段时间,这使得我的实验无法继续 我有一个软件从外部硬件(射电望远镜项目)连续收集数据,并以csv格式存储。由于安装在远程位置,我每天会在一个安全的地方复制保存的数据并擦除文件内容,同时,出于同样的原因,我无法停止硬件/软件,因此日志旋转等软件将不是一个选项 尽管付出了很多努力,但被擦除的文件似乎仍在不断增长,尽管它是空的 奇怪的行为,显示文件大小,截断文件,再次显示文件大小: pi@to

如何将文本流导入文件,并在文件仍在使用时,将其擦除以进行作业轮换


长版本:

我在一个显然很小的问题上挣扎了一段时间,这使得我的实验无法继续

我有一个软件从外部硬件(射电望远镜项目)连续收集数据,并以csv格式存储。由于安装在远程位置,我每天会在一个安全的地方复制保存的数据并擦除文件内容,同时,出于同样的原因,我无法停止硬件/软件,因此日志旋转等软件将不是一个选项

尽管付出了很多努力,但被擦除的文件似乎仍在不断增长,尽管它是空的

奇怪的行为,显示文件大小,截断文件,再次显示文件大小:

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;在给定问题中,在文件归零时追加到开头

供搜索引擎和将来参考:

sudo rtl_power -f 88M:108M:10k -g 1 - | tee -a radio.csv -
现在用

echo -n > radio.csv

按预期将文件归零。

欢迎使用SO!请阅读。特别是,尽量在你的问题中包含所有相关信息。很多读者都不会为了上下文而去关注其他问题的链接。我猜数据收集软件会保持文件持续打开,而不是关闭它,然后在下一个过程中重新打开它进行追加。尝试重命名文件,看看软件是否继续以新名称写入文件-我想如果它保持打开状态,它会继续写入文件-但如果不这样做,那么这可能是一个解决方案。另一个问题是如何截断文件-它似乎没有变为零字节。试着用radio.csv或cat/dev/null>radio.csv来截断。该死,这是对的!重命名文件会使流继续转到新的流。尝试cat/dev/null>radio.csv但未成功,文件在清空后继续增长[已编辑:我的意思是从原始大小继续增长,尽管一秒钟前已归零]。嗯。。。现在怎么办?有什么建议吗?@Michele:创建一个新文件,比如说newfile,然后通过
mv newfile radio.csv
将这个新文件移动到有问题的文件中,怎么样。您甚至可以使用
mv-f newfile radio.csv
强制它,这将强制替换旧文件。一旦您发现此步骤成功,您就可以通过编写bash脚本来自动化存储和删除数据的整个过程。您应该在提供的答案框中写下解决方案,然后接受该答案。这比在问题中编辑“已解决”一词更可取。