如何用很少的备用磁盘空间连接两个巨大的文件?

Ada*_*eld 8 filesystems concatenation large-files

假设您有两个要连接在一起的大文件(几GB),但是你有很少的备用磁盘空间(比方说几百MB).也就是说,给定file1file2,你想用一个单一的文件,该文件是串联的结果落得file1file2共同字节的字节,并删除原始文件.

你无法做到这一点cat file2 >> file1; rm file2,因为在这两个操作之间,你的磁盘空间不足.

欢迎使用免费或非免费工具在任何和所有平台上提供解决方案; 这是我在前几天下载Linux ISO时想到的一个假设性问题,由于无线打嗝导致下载中途中断.

Ste*_*owe 15

花时间计算出涉及磁盘扇区改组和文件链操作的巧妙解决方案:2-4小时

获取/编写软件以进行就地复制和截断所花费的时间:2-20小时

倍中位数$ 50 /小时程序员费率:$ 400- $ 1200

1TB USB驱动器的成本:100美元至200美元

能够理解"机会成本"这个词:无价之宝

  • 从理论演习中获得的知识:无价的 (9认同)
  • 史蒂文,这是一个热闹的帖子.我不得不同意@edg.这些事情会让你在工作中变得更好.关于能否在以后赚钱的评论错过了重点.这就像是说"如果你永远不必解除工作中的任何重物,为什么要工作". (3认同)

Dou*_*der 8

我认为困难在于确定如何从原始文件中恢复空间.

我认为以下可能有效:

  1. 分配组合大小的稀疏文件.
  2. 将100Mb从第二个文件的末尾复制到新文件的末尾.
  3. 截断第二个文件末尾的100Mb
  4. 循环2和3,直到完成第二个文件(将2.修改为目标文件中的正确位置).
  5. 做第2和第3和第4,但使用第一个文件.

这一切都依赖于稀疏文件支持和文件截断立即释放空间.

如果您确实想要这样做,那么您应该调查该dd命令.哪个可以进行复制步骤

另一个答案中的某个人给出了一个不需要稀疏文件的简洁解决方案,但是复制了file2两次:

  1. 将100Mb块从文件2的末尾复制到新文件3,以相反的顺序结束.随时截断文件2.
  2. 将100Mb块从文件3的末尾复制到文件1中,最后以原始顺序的块结束,在文件1的末尾.随后截断文件3.


Mar*_*som 7

这比我的第一个答案略有改进.

如果您有100MB可用空间,请从第二个文件复制最后100MB并创建第​​三个文件.截断第二个文件,使其现在缩小100MB.重复此过程,直到第二个文件完全分解为单个100MB块.

现在,每个100MB文件都可以附加到第一个文件,一次一个.