Cách để phát hiện file trùng nội dung (duplicated files)?
Đang tìm một ‘strategy’ thích hợp để lùng ra các files có cùng nội dung (duplicate) trong một thư mục (directory), bao gồm cả các thư mục con (recursive).
Hiện tại (*) tôi dùng cách ‘thủ công’ là đặt cho mỗi file một dãy mã hash (128-bit) tương ứng với nội dung (bytes sequence (stream)) của file khi open nó. Sau đó so sánh các hash này để phát hiện các files có nội dung như nhau.
(*) FiFo: https://www.microsoft.com/en-us/store/p/fifo-files-folders-utilities-free/9n2mb2n6l4t5
Một số nhược điểm mà tôi đang gặp:
- nếu số lượng file, và size nhiều thì sẽ càng tiêu tốn tài nguyên (time, CPU, performance).
- có cách nào khác (thay vì hash) để tìm một mã/giá trị duy nhất cho một file với một nội dung cho sẵn?
- hiện tại, tôi đang nghĩ đến việc gạn lọc (filter) đầu vào trước, ví dụ nếu 2 files có size khác nhau thì dĩ nhiên là không phải là duplicate rồi. Còn có giải pháp nào khác nữa không?
Thanks
Sử dụng CRC64 để pre-hash rồi mới chạy sha256.
Tạo 1 array chứa Object({path,size})
Sort cái array đó theo size.
Duyệt qua cái array đó chỗ nào cùng size thì so sánh.
So sánh thì cứ
Lúc so sánh thì: Chỉ hash 1 phần nhỏ với file có nội dung lớn
Thanks bro!
Có thể thêm một ít: