Jak wyodrębnić wieloczęściowy rar z brakującymi częściami?


12

Mam w nim wieloczęściowe .rararchiwum zawierające pojedynczy .tar.gzplik (nie pytaj dlaczego, tak właśnie powstał). Brakuje mi kilku części, ale mam pierwszą część. Chciałbym wydobyć jak najwięcej .tar.gz. Jak mogę to zrobić?

Jeśli uruchomić unrar x -kb file.part1.rarto zawsze wydobywa początku .tar.gzod part1i zatrzymuje się tam z błędem. Cieszę się, że mogę wypróbować dowolne narzędzia (nie musi to być przypadkowe).


1
oczywiście potrzebujesz całej rzeczy, bo inaczej nie zadziała
Najgorszy

1
Mówi, że chce „jak najwięcej”. Jednak jest wysoce prawdopodobne, że cokolwiek wypakuje, nie będzie użyteczne, chyba że jest to prosty format pliku (bitmapa?).
WindowsEscapist

Jeśli w środku jest inne archiwum zawierające wiele plików, być może uda mu się odzyskać niektóre pliki. Sztuka polega na tym, aby WinRar wyodrębniał jak najwięcej.
davidbaumann

2
Nie rozumiem, dlaczego ludzie głosują na pytania, tylko dlatego, że nie rozumieją.
davidbaumann

Więc znalazłeś rozwiązanie i podzieliłeś się z nami?
davidbaumann,

Odpowiedzi:


2

Miałem podobną sytuację w systemie Windows , kiedy miałem części 1,5,6,9,10 na 10. Brakowało mi części 2,3,4,7,8.

  1. użyj 7zip, aby wyodrębnić posiadane części i odpowiednio zmień ich nazwy. tj .: pt1 pt5 pt6 itp.

  2. wygeneruj plik zerowy (zero), aby wypełnić brakujące części, używając dokładnego rozmiaru w bajtach każdej z części, które masz i wyodrębniłeś (tj. rozmiar pt1, który jest taki sam jak rozmiar pt5 i pt6 ...):

    plik kreacji fsutil [ścieżka_do_pliku] [rozmiar_w_bytach]

    w moim przypadku użyłem:

    plik kreacji fsutil nowy C: \ TMP \ pusty 1022701562

  3. połączyć pliki (używając / b dla plików binarnych)

    kopiuj / b plik1 + plik2 + plik3 plik docelowy

    w moim przypadku:

    kopiuj / b pt1 + pusty + pusty + pusty + pt5 + pt6 + pusty + pusty + pt9 + pt10 plik_wyjściowy

kiedy to zostało zrobione, załadowałem plik do klienta Potop bittorrent i wymusiłem ponowne sprawdzenie, i brakowało mi tylko procentu, którego tak naprawdę nie miałem, co oznacza, że ​​klient bittorrent stwierdził, że mam prawdziwe informacje między wszystkimi zerami I dodany.


Nie rozumiem zbyt dobrze instrukcji. Jak „wyodrębnić posiadane części” z 7zip? 7z %filepróbuje załadować wszystkie pliki części i zwraca błąd, jeśli brakuje jednego z nich. Co to wszystko ma wspólnego z torrentami? Czy mogę wyodrębnić pojedyncze oryginalne skompresowane pliki z połączonego pliku binarnego za pomocą Potopu?
cduguet

5

Prawdopodobnie nie jest to już istotne, ale właśnie miałem ten sam problem i znalazłem proste rozwiązanie, które zadziałało dla mnie i pomyślałem, że warto się nim podzielić.

Miałem chronione hasłem archiwum RAR w 6 częściach, ale brakowało części 4. Próbowałem użyć funkcji „naprawy” WinRAR, ale powiedziała, że ​​nie można znaleźć rekordu odzyskiwania. Próbowałem powyższych metod, ale one nie działały, a ekstrakcja zawsze kończyła się tam, gdzie zaczynała się brakująca część.

W końcu postanowiłem oszukać WinRAR do myślenia w częściach 5 i 6, w których inne archiwum, i przemianowałem je na „archive.part1.rar” i „archive.part2.rar”. Następnie powiedziałem WinRARowi, aby wyodrębnił nową część 1 i mimo że otrzymałem komunikat o błędzie, informujący, że nie można wyodrębnić pliku, który zakończył się na początku nowej części 1 (ponieważ brakowało danych z brakującej części 4), udało się wyodrębnić wszystkie pozostałe pliki z oryginalnych części 5 i 6.

Mam nadzieję, że pomoże to innym osobom z tym samym problemem w przyszłości.


1

Zakładam, że 100 Mb części, brak części 3. Możesz spróbować

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

również spróbuję, co może działać lepiej i sprawić, że WinRar pomyśli, plik jest uszkodzony:

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

Dobre pomysły, wypróbowałem je. 1. Jeśli wszystkie istniejące części są skonkatenowane, funkcja unrar zawiedzie (błąd CRC) w tym samym miejscu. 2. Jeśli po prostu skopiuję późniejszą część, aby miała taką samą nazwę jak brakująca część, nie powiedzie się w tym samym miejscu, ale następnie wydrukuje wiadomości, które sugerują, że przetwarza późniejsze części (być może szukając początku innego pliku) 3. Jeśli utworzę plik z zerami za pomocą dd, nie powiedzie się to z „Bad Archive”
Alex I

A jeśli utworzę plik z zerami i połączy się, nie powiedzie się w tym samym miejscu, co „Nie można znaleźć woluminu”
Alex I

Tylko myślenie: cat blubb.rar | unrar > file.tgz.
davidbaumann

Może chcesz użyć WinRar dla Windows
davidbaumann

1

Krok 1: Zmień nazwę plików, na przykład:

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

Krok 2: Użyj 7-Zip, aby wyodrębnić każdy plik.

Zysk!

(W niektórych okolicznościach zmiana nazwy jest zbędna i możesz zezwolić 7-Zip na wyodrębnienie wszystkich plików.)


3
To nie pomoże w przypadku plików obejmujących więcej niż jeden plik części.
Rohit Gupta

Czy próbowałeś wyodrębnić każdy plik o zmienionej nazwie jeden po drugim za pomocą 7-Zip?
znaczącooi

1

Miałem tylko drugą część dwuczęściowego archiwum rar, podczas gdy rozpakowywanie części 2 zgodnie z oczekiwaniami winrar wyświetlił komunikat informujący o braku pierwszej części; Zauważyłem również, że pełna zawartość części drugiej została rozpakowana w folderze; więc nie dotykając wyskakującego komunikatu winrar, skopiowałem rozpakowane pliki do innego folderu, a następnie kliknąłem zamknij w wyskakującym oknie winrar; rozpakowana zawartość została usunięta przez winrar, ale ponieważ wcześniej skopiowałem je do innego folderu, mogłem użyć rozpakowanej zawartości z tego innego folderu.


0

7-zip wyodrębni część pliku z wieloczęściowego pliku rar, a następnie możesz połączyć je z powrotem za pomocą dd. Na przykład, jeśli masz pierwszą i ostatnią część 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))

Jeśli przesunięcie, którego potrzebujesz, nie jest liczbą pierwszą, użyj rozmiaru bloku większego niż jeden. ddmoże tylko seekdo wielokrotności wielkości bloku wyjściowego. ddnaprawdę wykonuje readi writewywołuje systemowe z tym rozmiarem bloku, więc bs=1naprawdę jest do kitu.

Duży ibs(rozmiar bloku wejściowego) zaoszczędziłby połowę czasu procesora, ponieważ seekjest wyrażony w jednostkach obs(rozmiar bloku wyjściowego). A może istnieje jakieś inne narzędzie, które może szukać dowolnej pozycji bajtu, a następnie wykonywać operacje we / wy normalnej wielkości. Lub jeśli piszesz to, możesz dd z bs=1wyrównaniem do 32k, to możetail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.