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. dd
chỉ có thể seek
để bội số của kích thước khối đầu ra. dd
thực sự thực hiện read
và write
gọi hệ thống với kích thước khối đó, vì vậy bs=1
thực sự rất tệ.
Một ibs
kí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 seek
theo đơ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=1
tố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) ))