O 7-zip extrairá a parte de um arquivo de um rar de várias partes e você poderá costurá-las novamente com o dd. Por exemplo, se você possui a primeira e a última parte 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))
Se o deslocamento que você precisa procurar não for primo, use um tamanho de bloco maior que um. dd
pode apenas seek
para múltiplos do tamanho do bloco de saída. dd
realmente faz read
e write
chama o sistema com esse tamanho de bloco, então bs=1
é realmente péssimo.
Um grande ibs
(tamanho do bloco de entrada) economizaria metade do tempo da CPU, uma vez que seek
está em unidades de obs
(tamanho do bloco de saída). Ou talvez haja alguma outra ferramenta que possa procurar uma posição arbitrária de bytes e, em seguida, executar E / Ss de tamanho normal. Ou, se você estivesse escrevendo isso, poderia dd com bs=1
alinhamentos de até 32k, talveztail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))