我最近工作的一个问题让我希望我可以丢掉文件的正面.如果你愿意,有点像"前面的截断".在后端截断文件是一种常见的操作 - 我们做的事情甚至没有考虑太多.但是砍掉文件的正面?起初听起来很荒谬,但这只是因为我们受过训练才认为这是不可能的.但是在某些情况下,垂直操作可能很有用.
一个简单的例子(当然不是唯一或必然是最好的例子)是FIFO队列.您正在将新项目添加到文件末尾,并从前面将项目从文件中提取出来.文件随着时间的推移而增长,前面有一个巨大的空白空间.对于当前的文件系统,有几种解决此问题的方法:
但是如果有一个lop操作,从队列中删除一个项目就像更新文件开头标记一样简单.事实上,就像截断文件一样简单.那么,为什么没有这样的操作呢?
我对文件系统实现有一点了解,并且没有看到任何特殊原因这很难.它看起来像所有它需要的是另一个单词(dword,也许?)每个分配条目,以说明文件在块中的开始位置.对于1美元以下100美元以下的驱动器,这样的功能似乎是一个相当小的代价.
如果您可以像在最后截断那样有效地删除文件的前面,那么还可以使其他任务变得更容易?
你能想到这个功能无法添加到现代文件系统的任何技术原因吗?其他非技术原因?
我有一个嵌入式Linux系统,它将数据存储在一个非常大的文件中,并将新数据附加到最后.随着文件大小增加到填充可用存储空间附近,我需要删除最旧的数据.
问题是,我不能真正接受将大量数据"移动"到文件中所需要的中断,就像正常一样 - 将文件锁定一段时间只是为了重写它(加上这是一个闪存介质) ,这会对闪光灯造成不必要的磨损).
可能最简单的方法是将文件拆分成多个较小的文件,但这有几个与数据处理和处理方式相关的缺点 - 所有"客户端"软件都需要单个文件.OTOH它可以处理将第一个记录减半的'腐败',因此文件不需要在记录偏移处进行修整,只需"在那里某处",例如,前几个iNode被释放.无论如何,最旧的数据已经过时,因此文件开头的更严重的损坏是完全可以接受的,只要"尾巴"保持清洁,并且可以采取多少精确删除的自由 - "大约几个第一兆字节"是可以的,无需'先精确4096KB'精度.
是否有一些方法,API,技巧,黑客来截断这样的文件的开头?
假设您有两个要连接在一起的大文件(几GB),但是你有很少的备用磁盘空间(比方说几百MB).也就是说,给定file1和file2,你想用一个单一的文件,该文件是串联的结果落得file1和file2共同字节的字节,并删除原始文件.
你无法做到这一点cat file2 >> file1; rm file2,因为在这两个操作之间,你的磁盘空间不足.
欢迎使用免费或非免费工具在任何和所有平台上提供解决方案; 这是我在前几天下载Linux ISO时想到的一个假设性问题,由于无线打嗝导致下载中途中断.
我有一个大文本文件(~3GB)。在创建它时,我犯了一个错误,只有第一行的前几个(不是全部)字符是错误的。第一行中的其余字符是正确的。所有其他行也是正确的。我的,很简单,问题是:
如何删除这么大文件的前 n 个字符?我不想删除整个第一行,只删除前 n 个字符。我的要求是:
我试过 sed,但它替换了第一行并复制了所有其余的行……也许我可以使用“退出”选项?当然,我可以再次创建文件,而不会犯那个错误......