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. ddsolo puede seeka múltiplos del tamaño del bloque de salida. ddRealmente hace ready writellama al sistema con ese tamaño de bloque, así que bs=1realmente apesta.
Un gran ibs(tamaño de bloque de entrada) ahorraría la mitad del tiempo de CPU, ya que seekestá 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=1hasta 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) ))