合并/join文件* .001,* .002,* .003 ..不复制到新的一个

如何将文件合并到一个文件中而不复制到新文件中?
来源:我有file.dd.001,file.dd.002,file.dd.003,file.dd.004 …
任务:我有600个文件(1,5 Gb)。 所有这些文件的容量:大约900 GB。 硬盘容量:1.5TB。 我不能用Total Commander或7-zip或WinRARjoin这些文件,因为硬盘容量是复制到新文件(没有足够的可用空间)。
需要:join文件,也许做几次,但是:
1)join100个第一个文件(150 GB)。 删除拆分的文件(前100个)。
2)join下一个100个文件到这个合并文件(150 GB) 。 删除这100个文件。
3)join下100个合并文件(300 GB)…
问题:有人可以告诉我如何使合并(连接)文件到一个新的越来越大的文件? 也许软件存在,或者最后机会用C#代码解决这个问题。 有任何想法吗

自己写。

打开文件#1。 寻求结束。 打开文件#2,开始阅读内容并附加到文件#1。

完成后,删除文件#2,并继续文件#3。

在合理的脚本语言中应该<10行。

我不知道Windows,但在Unix上,你可以做:

for num in `seq -w 2 600`; do cat file.dd.$num >> file.dd.001 rm file.dd.$num done 

注意使用append >>输出重定向。

你可以通过使用dd而不是cat来更快速地使用dd ,它应该使用零拷贝传输(即让内核完成工作,而不是将文件读入内存并写入输出流)。

  dd if=file.dd.$num of=file.dd.001 conv=notrunc oflag=append bs=10M 

这应该让你接近你的硬盘可以提供的IO。

感谢@ Anony-Mousse和他有用的Linux代码示例
问题已经解决了…
Windows有cmd命令,我在Harlan Harvey一书的Windows Forensic Analysis Dvd Toolkit 2E(2009)一书中找到。 448:

 D:\Images>type image.001 > image_all.img D:\Images>type image.002 >> image_all.img D:\Images>type image.002 >> image_all.img 

如果我有300 Gb( image_all.img )的文件,并且我需要将50个文件(1,5 Gb)加入它,则需要:

 D:\Images>type image.200 >> image_all.img D:\Images>type image.201 >> image_all.img D:\Images>type image.202 >> image_all.img D:\Images>type image.203 >> image_all.img …. D:\Images>type image.498 >> image_all.img D:\Images>type image.499 >> image_all.img 

或更好:

 D:\Images>type image.* >> image_all.img 

并将文件夹中的所有文件(带有掩码)连接到文件image_all.img

我假设你想合并这些文件来简化处理,对吧? 如果这是您的目标,那么使用FIFO文件更有效率。 在* nix(linux,macos,* bsd等)上,您可以使用mkfifo命令创建一个“代表”所有文件的FIFO文件,如下所示:

 mkfifo mybigfile cat file.dd.* > mybigfile & {{process}} mybigfile 

文件mybigfile将包含file.dd. {001,002,003 …}文件的所有内容,您可以将所有这些文件作为单个大文件进行处理。 一旦你的过程完成读取文件, mybigfile将是空的,并“填充”它,你需要执行“ cat file.dd. *> mybigfile& ”命令

现在,原来的问题包含了一些微软窗口引用(C#,winrar和总指挥官),所以我认为作者需要一个Windows解决方案。 我不是一个Windows的家伙,但我相信上述可以在cygwin下使用或使用命名管道和PowerShell(但我可能是完全错误的)