7-zip sẽ trích xuất một phần của tệp từ rar đa phần, và sau đó bạn có thể ghép chúng lại với nhau bằng dd. Ví dụ: nếu bạn có phần rar đầu tiên và cuối cùng:
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))
Nếu phần bù bạn cần tìm không phải là số nguyên tố, thì hãy sử dụng kích thước khối lớn hơn một. ddchỉ có thể seekđể bội số của kích thước khối đầu ra. ddthực sự thực hiện readvà writegọi hệ thống với kích thước khối đó, vì vậy bs=1thực sự rất tệ.
Một ibskích thước lớn (kích thước khối đầu vào) sẽ tiết kiệm một nửa thời gian của CPU, vì tính seektheo đơn vị obs(kích thước khối đầu ra). Hoặc có thể có một số công cụ khác có thể tìm kiếm một vị trí byte tùy ý và sau đó thực hiện I / O có kích thước bình thường. Hoặc nếu bạn đang viết kịch bản này, bạn có thể dd với bs=1tối đa 32k được căn chỉnh, sau đó có thểtail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))