Як витягнути багаточастинні rar з відсутніми частинами?


12

У мене є багатопартійний .rarархів, що містить один .tar.gzфайл всередині нього (не питайте, чому саме так він був зроблений). Я пропускаю кілька частин, але є перша частина. Я хотів би витягнути якомога більше .tar.gzможливостей. Як я можу це зробити?

Якщо я запускаю, unrar x -kb file.part1.rarвін завжди отримує початок .tar.gzз part1і зупиняється на ньому з помилкою. Я радий спробувати будь-які інструменти (не обов’язково бути unrar).


1
Очевидно, вам потрібна вся справа, інакше вона не буде працювати
Sickest

1
Що ж, він каже, що хоче "якнайбільше". Однак велика ймовірність, що все, що він витягує, не буде корисним, якщо тільки це не простий формат файлу (растрова карта?).
WindowsEscapist

Якщо всередині є ще один архів, який містить багато файлів, він може відновити деякі файли. Хитрість полягає лише в тому, щоб зробити екстракт WinRar якомога більше.
davidbaumann

2
Я не розумію, чому люди відмовляються від питань, просто тому, що вони не розуміють.
davidbaumann

Отже, ти знайшов рішення та поділився з нами?
davidbaumann

Відповіді:


2

У мене була подібна річ на вікнах , коли у мене були частини 1,5,6,9,10 з 10. Мені бракувало деталей 2,3,4,7,8.

  1. використовуйте 7zip для витягування наявних у вас частин та перейменуйте їх відповідно. тобто: pt1 pt5 pt6 і т.д.

  2. генеруйте null (нульовий) файл для заповнення відсутніх частин, використовуючи точний розмір у байтах кожної з ваших частин, які ви маєте, і витягуєте (тобто розмір pt1, який відповідає розміру pt5 та pt6 ...):

    fsutil file createnew [path_to_file] [size_in_bytes]

    у моєму випадку я використовував:

    fsutil створення файлу знов C: \ TMP \ empty 1022701562

  3. об'єднати файли (використовуючи / b для бінарних файлів)

    копіювати / b файл1 + файл2 + файл3 цільовий файл

    у моєму випадку:

    копіювати / b pt1 + порожній + порожній + порожній + pt5 + pt6 + порожній + порожній + pt9 + pt10 вихідний_файл

коли це було зроблено, я завантажував файл у клієнт Delitor bittorrent і примушував повторну перевірку, і мені бракувало лише того відсотка, якого у мене справді не було, тобто клієнт bittorrent виявив, що я маю правдиву інформацію між усіма нулями I додано.


Я не дуже добре розумію інструкцію. Як ви "витягуєте наявні вами частини" з 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

Я припускаю, що деталі в 100 Мб, частина 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, це не вдасться отримати "Поганий архів"
Олексій I

І якщо я створити файл нулів і з'єднати його, він не працює там же, де не вдається "Неможливо знайти гучність"
Alex I I

Тільки думаючи : cat blubb.rar | unrar > file.tgz.
davidbaumann

Можливо, ви хочете використовувати WinRar для Windows
davidbaumann

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

1

У мене була лише друга частина архіву rar з двох частин, при цьому розпаковуючи частину 2, як очікувалося, Winrar вискакував повідомлення про те, що перша частина відсутня; Я також помітив, що повний вміст другої частини був розпакований у папці; тому, не торкаючись спливаючого повідомлення winrar, я скопіював розпаковані файли в іншу папку, а потім натиснув на закрити у спливаючому повідомленні winrar; розпакований вміст був видалений програмою winrar, але оскільки я скопіював їх раніше в іншу папку, я міг використати розпакований вміст із цієї іншої папки.


0

7-zip витягне частину файлу з багатоскладової rar, а потім ви зможете зшити їх назад разом з dd. Наприклад, якщо у вас є перша і остання rar-частини:

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))

Якщо зміщення, до якого потрібно прагнути, не є простим, тоді використовуйте розмір блоку, більший за один. ddможе лише seekдо кратних розмірів вихідного блоку. ddнасправді робить readі writeсистемні дзвінки з таким розміром блоку, так що це bs=1справді добре.

Великий ibs(розмір вхідного блоку) дозволить заощадити половину часу процесора, оскільки seekзнаходиться в одиницях obs(розмір вихідного блоку). Або, можливо, є якийсь інший інструмент, який може домагатися довільної позиції байтів, а потім робити введення / виведення звичайного розміру. Або якщо ви писали це за сценарієм, ви могли б отримати DD з bs=1вирівнюванням до 32 к, тоді можливоtail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.