gpt4 book ai didi

perl - 如果磁盘空间不足,如何在不存在截断文件的危险的情况下从 shell 脚本重写文件?

转载 作者:行者123 更新时间:2023-12-03 17:46:44 25 4
gpt4 key购买 nike

如果磁盘空间不足,如何在不存在截断文件的危险的情况下从 shell 脚本重写文件?

这个方便的 perl one liner 将名为 test.txt 的文件中所有出现的“foo”替换为“bar”:

perl -pi -e 's/foo/bar/g' test.txt

这非常有用,但是...

如果 test.txt 所在的文件系统磁盘空间不足,test.txt 将被截断为零字节文件。

有没有一种简单的、无竞争条件的方法来避免这种截断的发生?

我希望 test.txt 文件保持不变,如果文件系统空间不足,命令返回错误。

理想情况下,该解决方案应该可以从 shell 脚本轻松使用,而无需安装其他软件(除了“标准”UNIX 工具,如 sed 和 perl)。

谢谢!

最佳答案

一般来说,这是做不到的。请记住,空间不足的情况可能会出现在操作序列中的任何位置,从而产生就地编辑的外观。一旦文件系统已满,perl 可能无法撤消先前的操作以恢复原始状态。

更安全的使用方式 -i switch 是使用非空备份后缀,例如,

perl -pi.bak -e 's/foo/bar/g' test.txt

这样,如果过程中出现问题,您仍然拥有原始数据。

如果你想自己滚动,一定要检查从 close 返回的值。系统调用。正如 Linux 手册页所述,

Not checking the return value of close() is a common but nevertheless serious programming error. It is quite possible that errors on a previous write(2) operation are first reported at the final close(). Not checking the return value when closing the file may lead to silent loss of data. This can especially be observed with NFS and with disk quota.



与生活中的其他一切一样,给自己留更多犯错的余地。磁盘便宜。从沙发垫上掏出零钱,然后给自己买半 TB 左右的零钱。

关于perl - 如果磁盘空间不足,如何在不存在截断文件的危险的情况下从 shell 脚本重写文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com