7-zip extraerá la parte de un archivo de un rar de varias partes, y luego puede volver a unirlas con dd. Por ejemplo, si tiene las primeras y últimas partes 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))
Si el desplazamiento que necesita buscar no es primo, use un tamaño de bloque mayor que uno. dd
solo puede seek
a múltiplos del tamaño del bloque de salida. dd
Realmente hace read
y write
llama al sistema con ese tamaño de bloque, así que bs=1
realmente apesta.
Un gran ibs
(tamaño de bloque de entrada) ahorraría la mitad del tiempo de CPU, ya que seek
está en unidades de obs
(tamaño de bloque de salida). O tal vez hay alguna otra herramienta que puede buscar una posición de byte arbitraria y luego hacer E / S de tamaño normal. O si estuviera escribiendo esto, podría hacer dd con bs=1
hasta 32k alineados, entonces tal veztail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))