7-zip, bir dosyanın parçasını çok parçalı bir rar'den ayıklar ve daha sonra bunları dd ile birleştirebilirsiniz. Örneğin, ilk ve son rar parçalarına sahipseniz:
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))
Aramanız gereken ofset asal değilse, birden büyük bir blok boyutu kullanın. dd
yalnızca seek
çıkış bloğu boyutunun katlarına kadar olabilir . dd
gerçekten bu blok boyutu ile arama yapar read
ve write
sistem çağrıları, bu yüzden bs=1
gerçekten berbat.
Büyük bir ibs
(giriş bloğu boyutu) (çıkış bloğu boyutu) seek
birimlerinde olduğu için CPU süresinin yarısını koruyacaktır obs
. Ya da belki de keyfi bir bayt pozisyonu arayabilen ve daha sonra normal boyutlu I / O'lar yapabilen başka bir araç var. Veya bunu senaryo yazıyorsanız bs=1
, 32k'ye kadar hizaya sahip olabilirsiniz, o zaman belkitail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))