如何提取缺少零件的multipart rar?


12

我有一个.rar包含单个.tar.gz文件的多部分归档文件(不要问为什么,这就是它的制作方式)。我缺少一些部分,但确实有第一部分。我想提取尽可能多的内容.tar.gz。我怎样才能做到这一点?

如果我运行unrar x -kb file.part1.rar它,则始终.tar.gz从中提取from 的开头,并从part1那里停止并出现错误。我很乐意尝试任何工具(不一定要解压缩)。


1
显然,您需要整个过程,否则它将无法正常工作
Sickest 2014年

1
好吧,他确实说他想要“尽可能多”。但是,除非是简单的文件格式(位图?),否则他提取的任何内容极有可能无法使用。
WindowsEscapist 2014年

如果里面还有另一个包含许多文件的档案,他也许可以恢复一些文件。诀窍是尽可能使WinRar提取。
davidbaumann 2014年

2
我不明白为什么人们会因为自己不理解而否决问题。
davidbaumann 2014年

那么您找到解决方案并与我们分享了吗?
davidbaumann 2015年

Answers:


2

我在Windows上有类似的东西,当我有10个零件中有1,5,6,9,10时,我缺少了2,3,4,7,8个零件。

  1. 使用7zip提取您拥有的部件,并相应地重命名它们。即:pt1 pt5 pt6,依此类推。

  2. 使用您拥有并提取的每个部分的确切大小(以字节为单位),生成空(零)文件以填充丢失的部分(即pt1的大小与pt5和pt6的大小相同...):

    fsutil文件createnew [path_to_file] [size_in_bytes]

    就我而言,我使用了:

    fsutil文件createnew C:\ TMP \ empty 1022701562

  3. 连接文件(使用/ b表示二进制文件)

    复制/ b file1 + file2 + file3目标文件

    就我而言:

    复制/ b pt1 + empty + empty + empty + pt5 + pt6 + empty + empty + pt9 + pt10 output_file

完成后,我将文件加载到Deluge bittorrent客户端中,并强制重新检查,而我只错过了我真正没有的百分比,这意味着bittorrent客户端确定我确实拥有所有零之间的真实信息。添加。


我不太清楚这些说明。您如何从7zip中“提取您拥有的零件”?7z %file尝试加载所有零件文件,如果其中之一已经丢失,则返回错误。整个流程与洪流有什么关系?我可以使用Deluge从串联的二进制文件中提取单个原始压缩文件吗?
cduguet

5

这可能不再相关,但是我遇到了同样的问题,找到了一个对我有用的简单解决方案,并认为可以共享。

我有一个受密码保护的RAR归档文件,分为6部分,但缺少第4部分。我试图使用WinRAR的“修复”功能,但是它说找不到恢复记录。我尝试了上面的方法,但是它们不起作用,并且提取总是在缺少的部分开始的地方停止。

最后,我决定让WinRAR陷入第5和第6部分的思考,在其中保存另一个档案,并将它们重命名为“ archive.part1.rar”和“ archive.part2.rar”。然后,我告诉WinRAR提取新的第1部分,尽管我收到一条错误消息,说它无法提取以新的第1部分开头的文件(因为它缺少第4部分中的某些数据),它设法从原始部分5和6中提取了所有其他文件。

我希望这会在将来对其他有相同问题的人有所帮助。


1

我假设有100Mb的部件,第3部分丢失。你可以试试

cat blubb.part01.rar blubb.part02.rar blubb.part04.rar > blubb.rar

我也会尝试,这可能会更好,并使WinRar认为文件已损坏:

dd if=/dev/zero of=blubb.part03.rar bs=1M count=100
cat blubb.part01.rar blubb.part02.rar blubb.part03.rar blubb.part04.rar > blubb.rar

好主意,尝试了一下。1.如果将所有现有零件连接在一起,unrar会在完全相同的位置失败(CRC错误)。2.如果我只是复制后一个部分以与丢失的部分具有相同的名称,则它会在同一位置失败,但是会打印一条消息,暗示它正在处理后一个部分(也许正在寻找另一个文件的开头)3。如果我使用dd创建全零文件,它将失败并显示“错误的存档”
Alex I

而且,如果我创建一个全零文件并进行连接,它将在同一位置失败,并显示“找不到卷”
Alex I

只是想:cat blubb.rar | unrar > file.tgz
davidbaumann 2014年


1

步骤1:重命名文件,例如:

file.part1.rar -> fileA.rar
file.part2.rar -> fileB.rar
file.part3.rar -> fileC.rar
etc..

步骤2:使用7-Zip提取每个文件。

利润!

(在某些情况下,重命名是不必要的,您可以让7-Zip为您提取所有文件。)


3
这对于跨越多个零件文件的文件没有帮助。
罗希特·古普塔

您是否尝试过使用7-Zip逐个提取每个重命名的文件?
cychoi 2015年

1

我只有两部分的rar档案的第二部分,而按预期打开第二部分的包装,winrar弹出一条消息说第一部分丢失了。我还注意到第二部分的全部内容已在文件夹中解压;因此,在不触摸winrar弹出消息的情况下,我将解压缩的文件复制到另一个文件夹中,然后单击winrar弹出消息中的close;解压缩的内容已由winrar删除,但是由于我之前已将它们复制到另一个文件夹中,因此可以使用该不同文件夹中的解压缩内容。


0

7-zip将从多部分rar中提取文件的一部分,然后您可以将它们与dd缝合在一起。例如,如果您拥有第一个和最后一个rar-parts:

7z x p1.rar
mv dir p1  # rename out of the way
7z x plast.rar
unrar l p1.rar
   # note the file size of the entire file
ls -l dir/file  # note the size of the last part
dd if=dir/file of=p1/file  conv=notrunc  bs=1 seek=$((full_size - lastpart_size))

如果您需要寻找的偏移量不是素数,请使用大于1的块大小。 dd只能seek为输出块大小的倍数。 dd确实使用该块大小进行了make readwrite系统调用,所以bs=1非常糟糕。

大的ibs(输入块大小)将节省一半的CPU时间,因为seek单位为obs(输出块大小)。也许还有其他一些工具可以查找任意字节位置,然后执行常规大小的I / O。或者,如果您正在编写脚本,则可以dd bs=1最多对齐32k,然后也许tail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.