2

скажем, у меня есть загрузка из нескольких частей файла .rar, один файл внутри.

Ранее в Windows с winrar я открыл part01.rar и начал извлечение. Он был извлечен до конца последней части, которая уже была загружена, а затем попросил меня перейти к следующей части. Например, я мог посмотреть видео и просто нажать "повторить" в WinRAR, когда следующие части были закончены.

Есть ли способ на Ubuntu, как это? Я бы даже предпочел автоматическое решение для командной строки ... как один процесс, ожидающий новые файлы .rar и затем посылающий "repeat" другому процессу ...

Надеюсь, это не так уж сложно понять :)

Дэвид.

2 ответа2

1

Уютный скрипт или просто unrar -kb

Сам Unrar предоставляет опцию (-kb) для хранения поврежденных (или неполных) извлеченных файлов.
Здесь следует обратить внимание на код выхода (3), который, в отличие от 0, указывает на наличие ошибки 8-) .
Таким образом, вы можете просто создать сценарий, пытающийся извлечь файл, пока он не удастся (код выхода 0).

Читая его справку по man unrar (давать пару человек в день не вредно), вы можете заметить, по крайней мере, пару других опций, полезных для скрипта, а именно -o+ и -inul для принудительной перезаписи файла (s) и подавить вывод.

Если скрипт называется go.sh вы можете сделать его исполняемым (chmod u+x ./go.sh) и затем выполнить ./go.sh Myfile.part01.rar . Обратите внимание, что вы можете изменить значения времени ожидания и максимального количества разрешенных итераций.

#!/bin/bash
MaxCounter=5       # Max number of iteration before it exits 
TimeToSleep=10m    # Time to sleep between 2 iteractions
COUNTER=0

until [ $COUNTER -gt $MaxCounter  ] 
 do 
   printf "### Attempt $COUNTER on $MaxCounter\t"
   unrar x "$@" -kb -inul -o+ \
     && { printf "\n\n### Extraction completed\n\n ### DONE ###\n\n"; exit 0; }\  
     || echo "### Extraction Not completed"
   let COUNTER+=1  
   sleep $TimeToSleep
 done
printf "\n\n### $MaxCounter iterations reached \n\n ### ERROR ### \n"

Примечание: как недостаток он будет перезаписывать каждый раз файл ... но это было то, что вы делали с winrar тоже ... Хорошо, что вероятность того, что файл находится в каком-то буфере кэша, достаточно высока, и он не будет перезаписываться каждый раз ...
Если вы сможете найти версию unrar (или другую программу, например, 7z ...), которая продолжает извлечение, она будет более эффективной без перезаписи.

0

Команда unrar для извлечения всего возможного и игнорирования отсутствующих фрагментов в архиве RAR, состоящем из нескольких частей:

 unrar x -kb myfile.rar.01

Где -kb означает "Хранить поврежденные извлеченные файлы".

Это должно извлечь видео до отсутствующей части и остановиться, что позволит вам продолжать смотреть видео с этой части раньше.

К сожалению, это не ждет отсутствующих частей. Решение, использующее сценарий для подачи фрагментов для unrar и ожидания, к сожалению, также не может работать, так как потоки FIFO (первый-в-первый-выход), такие как /dev/stdin , не доступны для поиска, и это, очевидно, то, что unrar должен иметь для обработать архив.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .