在 Linux 上从头开始收缩(截断)文件
在 Linux(和/或其他 Unix)中是否可以从头开始“收缩”文件?我想将它用于持久队列(没有现有的实现适合我的需求)。从文件末尾我猜想可以使用 truncate() 。
Is it possible in Linux (and/or on other Unix) 'shrink' file from beginning? I'd like to use it for persistent queue (no existing implementation suits my needs). From end of file I guess it's possible with truncate().
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您使用的是 ext4、xfs 或其他一些现代文件系统,从 Linux Kernel 3.15 开始,您可以使用:
和
FALLOC_FL_COLLAPSE_RANGE
标志。http://manpages.ubuntu.com/manpages/disco/ en/man2/fallocate.2.html
If you are using ext4, xfs or some other modern file system, since Linux Kernel 3.15 you can use:
with the
FALLOC_FL_COLLAPSE_RANGE
flag.http://manpages.ubuntu.com/manpages/disco/en/man2/fallocate.2.html
您可以尝试使用 ex 删除一半日志,但它没有我想要的那么快(5GB 日志需要很长时间):
You can try dropping half of logs using ex, but it is not as fast as I would like (5GB of logs takes ages):
是的,您可以使用
cut
或tail
删除文件的部分内容。cut -b 17- input_file
tail -c +17 input_file
这将从第 17 个字节开始输出 input_file 的内容,从而有效地删除文件的前 16 个字节。请注意,
cut
示例还将向输出添加换行符。Yes, you can use
cut
ortail
to remove portions of a file.cut -b 17- input_file
tail -c +17 input_file
This will output the contents of input_file starting at the 17th byte, effectively removing the first 16 bytes of the file. Note that the
cut
example will also add a newline to the output.