在Linux上缩小(截断)文件开头

10
在Linux(和/或其他Unix系统)中,是否可能从文件开头“收缩”文件?我想用它来实现持久队列(没有现有的实现满足我的需求)。我猜从文件末尾使用truncate()函数是可能的。

我在写完这篇文章后开始搜索“截断开头”,但似乎不可能实现。 - woky
3个回答

3

0

您可以尝试使用 ex 删除一半的日志,但速度可能不如我所愿(5GB 的日志需要很长时间):

ex -s -c "1d$(( $(wc -l /var/log/messages | awk '{ print $1 }') / 2 ))|x" /var/log/messages

-2

是的,您可以使用cuttail来删除文件的部分内容。

cut -b 17- input_file
tail -c +17 input_file

这将输出从第17个字节开始的input_file内容,有效地删除文件的前16个字节。请注意,cut示例还会向输出添加一个换行符。


我对通过某些系统调用实现高效的原地文件更新很感兴趣。你所建议的不是这个。 - woky
在这种情况下,您可以通过strace查看上述命令执行的系统调用,并仅执行操作的“核心”,而不是所有命令行解析等。 - MikeK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接