01/10/2018, 01:14

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

rogp10 viết 03:19 ngày 01/10/2018

Sử dụng CRC64 để pre-hash rồi mới chạy sha256.

cdxf viết 03:23 ngày 01/10/2018

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

  • Sau đó nếu hash giống nhau thì hẳn so sánh byte-to-byte
Lộc Nguyễn viết 03:31 ngày 01/10/2018

Thanks bro!
Có thể thêm một ít:

  • tạo 1 dictionary (path, size)
  • sort dựa trên size, chỉ dữ lại những file có size bằng nhau
  • kiểm tra file type extension (có lẽ optional tùy vào người dùng)
  • hash 1 phần nhỏ (ví dụ 100 bytes) so sánh trước để loại bỏ những file khác nhau
  • nếu giống hash thêm, ví dụ 200 bytes nữa (không biết có nên không?)
  • bước cuối cùng là hash toàn bộ file
Bài liên quan
0