Um script aconchegante ou simplesmente unrar -kb
O próprio Unrar fornece uma opção ( -kb
) para manter arquivos extraídos (ou incompletos).
O que devemos notar aqui é o código de saída (3) que, diferente de 0, indica a ocorrência de um erro 8-)
.
Então você pode simplesmente fazer um script tentando extrair o arquivo até que ele seja bem-sucedido (código de saída 0).
Lendo sua ajuda com man unrar
(nunca é prejudicial dar um par de homens por dia), você pode notar pelo menos algumas outras opções úteis para o script, ou seja, -o+
e -inul
para forçar a sobrescrita do (s) arquivo (s) e suprimir a saída.
Se o script tiver o nome go.sh
, você poderá torná-lo executável ( chmod u+x ./go.sh
) e, em seguida, executar ./go.sh Myfile.part01.rar
. Observe que você pode alterar os valores para o tempo de espera e o número máximo de iterações permitidas.
#!/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"
Nota: Como desvantagem ele sobrescreverá cada vez que o arquivo ... mas foi o que você estava fazendo com o winrar também ... O bom é que é suficiente a probabilidade de que o arquivo está em algum buffer de cache e ele não será realmente substituído a cada vez ...
Se você conseguir encontrar uma versão do unrar (ou outro programa, por exemplo, 7z
...) que continue a extração, ela será mais eficiente sem sobrescrever.