Tôi muốn thực hiện kiểm tra các tệp lớn và phát trực tuyến trong unix / linux và tôi muốn nhận được nhiều tổng kiểm tra từ mọi phần lớn của tệp / luồng, cứ 1 MB hoặc mỗi 10 MB.
Ví dụ, tôi có hình ảnh đĩa, hình ảnh đĩa nén và bản sao của đĩa gốc. Một số phần của hình ảnh có thể được sửa đổi. Đĩa có dung lượng 50 GB và có khoảng 50000 khối 1 MB. Vì vậy, với mỗi tệp tôi muốn nhận 50 000 md5sum hoặc sha1sums để có tổng quan về sửa đổi. Single md5sum sẽ không giúp tôi xác định vị trí bù sửa đổi.
Nhiệm vụ này dễ dàng cho hình ảnh đĩa không nén, với việc sử dụng dd
công cụ trong for
lặp trong bash với tính toán bù đắp và chọn (bỏ qua) mỗi phần 1 MB của tệp. Tương tự với đĩa:
for a in `seq 1 50000`; do echo -n "$a: "; dd if=image.src bs=1M count=1 skip=$a | md5sum; done
Nhưng bây giờ tôi muốn so sánh ảnh nén và không nén mà không giải nén nó vào đĩa. Tôi có 7z
giải nén có thể giải nén hình ảnh thành thiết bị xuất chuẩn với tốc độ cao, lên tới 150-200 MB / s (tùy chọn 7z e -so image.7z |
). Nhưng tôi có thể viết gì sau |
biểu tượng để có được md5sum của tất cả các phần tập tin.
Crypt::Rhash
(md5 + sha1 + tiger - vẫn còn khá nhanh). Bạn có thể thay đổi mã của tôi để dễ đọc và phong cách hơn.