我有一个.rar
包含单个.tar.gz
文件的多部分归档文件(不要问为什么,这就是它的制作方式)。我缺少一些部分,但确实有第一部分。我想提取尽可能多的内容.tar.gz
。我怎样才能做到这一点?
如果我运行unrar x -kb file.part1.rar
它,则始终.tar.gz
从中提取from 的开头,并从part1
那里停止并出现错误。我很乐意尝试任何工具(不一定要解压缩)。
我有一个.rar
包含单个.tar.gz
文件的多部分归档文件(不要问为什么,这就是它的制作方式)。我缺少一些部分,但确实有第一部分。我想提取尽可能多的内容.tar.gz
。我怎样才能做到这一点?
如果我运行unrar x -kb file.part1.rar
它,则始终.tar.gz
从中提取from 的开头,并从part1
那里停止并出现错误。我很乐意尝试任何工具(不一定要解压缩)。
Answers:
我在Windows上有类似的东西,当我有10个零件中有1,5,6,9,10时,我缺少了2,3,4,7,8个零件。
使用7zip提取您拥有的部件,并相应地重命名它们。即:pt1 pt5 pt6,依此类推。
使用您拥有并提取的每个部分的确切大小(以字节为单位),生成空(零)文件以填充丢失的部分(即pt1的大小与pt5和pt6的大小相同...):
fsutil文件createnew [path_to_file] [size_in_bytes]
就我而言,我使用了:
fsutil文件createnew C:\ TMP \ empty 1022701562
连接文件(使用/ b表示二进制文件)
复制/ b file1 + file2 + file3目标文件
就我而言:
复制/ b pt1 + empty + empty + empty + pt5 + pt6 + empty + empty + pt9 + pt10 output_file
完成后,我将文件加载到Deluge bittorrent客户端中,并强制重新检查,而我只错过了我真正没有的百分比,这意味着bittorrent客户端确定我确实拥有所有零之间的真实信息。添加。
7z %file
尝试加载所有零件文件,如果其中之一已经丢失,则返回错误。整个流程与洪流有什么关系?我可以使用Deluge从串联的二进制文件中提取单个原始压缩文件吗?
这可能不再相关,但是我遇到了同样的问题,找到了一个对我有用的简单解决方案,并认为可以共享。
我有一个受密码保护的RAR归档文件,分为6部分,但缺少第4部分。我试图使用WinRAR的“修复”功能,但是它说找不到恢复记录。我尝试了上面的方法,但是它们不起作用,并且提取总是在缺少的部分开始的地方停止。
最后,我决定让WinRAR陷入第5和第6部分的思考,在其中保存另一个档案,并将它们重命名为“ archive.part1.rar”和“ archive.part2.rar”。然后,我告诉WinRAR提取新的第1部分,尽管我收到一条错误消息,说它无法提取以新的第1部分开头的文件(因为它缺少第4部分中的某些数据),它设法从原始部分5和6中提取了所有其他文件。
我希望这会在将来对其他有相同问题的人有所帮助。
我假设有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
cat blubb.rar | unrar > file.tgz
。
步骤1:重命名文件,例如:
file.part1.rar -> fileA.rar
file.part2.rar -> fileB.rar
file.part3.rar -> fileC.rar
etc..
步骤2:使用7-Zip提取每个文件。
利润!
(在某些情况下,重命名是不必要的,您可以让7-Zip为您提取所有文件。)
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 read
和write
系统调用,所以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) ))