7-zipはマルチパートrarからファイルの一部を抽出し、ddでそれらをステッチすることができます。たとえば、最初と最後のrar-partsがある場合:
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))
求めるオフセットが素数でない場合は、1より大きいブロックサイズを使用します。 出力ブロックサイズの倍数にdd
しかできませんseek
。 dd
本当に負いませんread
し、write
そのブロックサイズでシステムコールが、そうbs=1
本当に吸います。
大きいibs
(入力ブロックサイズ)はseek
、obs
(出力ブロックサイズ)の単位であるため、CPU時間を半分節約します。あるいは、任意のバイト位置にシークして通常サイズのI / Oを実行できる他のツールがあるかもしれません。または、これをスクリプト化している場合は、bs=1
最大32k境界でddできます。tail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))