如何在不复制到新文件的情况下将文件合并为一个文件?
来源:我有file.dd.001,file.dd.002,file.dd.003,file.dd.004 ...
任务:我有600个文件(1,5 Gb)。所有这些文件的容量:大约900 GB。硬盘容量:1,5 TB。我无法使用Total Commander或7-zip或WinRAR加入这些文件,因为硬盘容量可以复制到新文件中(没有足够的可用空间)。
需要:加入文件,也许多次做程序,但是:
1)加入100个第一个文件(150 GB)。删除分割文件(前100个)
2)将接下来的100个文件加入此合并文件(150 GB)。删除这100个文件
3)加入下一个100 fies到合并文件(300 GB)...
问题:任何人都可以告诉我如何将文件合并(加入)到更大更大的文件?也许软件存在,或者最后用C#代码解决这个问题的机会。任何想法
答案 0 :(得分:4)
自己写。
打开文件#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
请注意使用追加>>
输出重定向。
你可以使用dd
而不是cat
来加快速度,它应该使用零拷贝传输(即让内核完成工作,而不是将文件读入内存并编写它到输出流)。
dd if=file.dd.$num of=file.dd.001 conv=notrunc oflag=append bs=10M
这可以让您接近硬盘可以在IO上提供的任何内容。
答案 1 :(得分:1)
感谢@ Anony-Mousse提供的有用的Linux代码示例
问题已经解决了......
Windows有cmd命令,我在本书 Windows Forensic Analysis Dvd Toolkit 2E(2009)中找到了Harlan Harvey 的页面。 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
答案 2 :(得分:0)
我假设您要合并这些文件以简化处理,对吧?如果这是您的目标,那么更有效的方法是使用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& “命令
现在,原始问题包含许多微软Windows引用(C#,winrar和总指挥官),所以我认为作者需要一个Windows解决方案。我不是windows家伙,但我相信上面的内容可以在cygwin下使用,也可以使用命名管道和PowerShell(但我可能完全错了)