Phương pháp tốt nhất để loại bỏ các tập tin hình ảnh trùng lặp từ máy tính của bạn là gì?


14

Tôi có rất nhiều tệp hình ảnh trùng lặp trên máy tính Windows của mình, trong các thư mục con khác nhau và với các tên tệp khác nhau.

Tập lệnh Python hoặc chương trình phần mềm miễn phí nào bạn muốn giới thiệu để loại bỏ các bản sao?

(Tôi đã đọc câu hỏi tương tự này , nhưng người đăng đang hỏi về các bản sao trực quan với các kích cỡ tệp khác nhau. Của tôi là các bản sao chính xác với các tên tệp khác nhau.)


2
Hãy nhớ rằng ngay cả khi tất cả các pixel giống nhau, chúng vẫn có thể có thông tin EXIF ​​khác nhau (được sửa đổi bởi các chương trình xử lý hình ảnh ở một số giai đoạn) sẽ gây ra vấn đề với hầu hết các giải pháp được đề xuất hiện nay.
dùng12889

Câu trả lời:


17

Đừng dựa vào số tiền MD5.

Các khoản tiền MD5 không phải là một cách đáng tin cậy để kiểm tra các bản sao, chúng chỉ là một cách để kiểm tra sự khác biệt.

Sử dụng MD5 để tìm các bản sao ứng cử viên có thể , và sau đó cho mỗi cặp chia sẻ MD5

  1. Mở cả hai tập tin
  2. Tìm kiếm chuyển tiếp trong các tập tin cho đến khi một khác nhau.

Thấy tôi bị hạ thấp bởi những người thực hiện các cách tiếp cận ngây thơ để gửi bản sao Nhận dạng, nếu bạn hoàn toàn dựa vào thuật toán băm, vì lợi ích, hãy sử dụng một cái gì đó khó khăn hơn như SHA256 hoặc SHA512, ít nhất là bạn sẽ giảm xác suất một mức độ hợp lý bằng cách kiểm tra nhiều bit hơn. MD5 cực kỳ yếu cho các điều kiện va chạm.

Tôi cũng khuyên mọi người đọc danh sách gửi thư ở đây có tiêu đề 'kiểm tra tệp': http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Nếu bạn nói "MD5 có thể xác định duy nhất tất cả các tệp duy nhất" thì bạn có lỗi logic.

Với một loạt các giá trị, độ dài dao động từ 40.000 byte chiều dài tới 100.000.000.000 byte chiều dài, tổng số kết hợp sẵn cho phạm vi đó đáng kể vượt quá số có thể có của các giá trị thể hiện bằng MD5, nặng vỏn vẹn 128 bit có độ dài.

Đại diện cho 2 ^ 100.000.000 kết hợp chỉ với 2 ^ 128 kết hợp? Tôi không nghĩ rằng có khả năng.

Cách ít nhất ngây thơ

Cách ít ngây thơ nhất và cách nhanh nhất để loại bỏ các bản sao như sau.

  1. Theo kích thước : Các tệp có kích thước khác nhau không thể giống hệt nhau. Điều này mất ít thời gian vì nó thậm chí không phải mở tệp.
  2. Theo MD5 : Các tệp có giá trị MD5 / Sha khác nhau không thể giống hệt nhau. Điều này mất nhiều thời gian hơn một chút vì nó phải đọc tất cả các byte trong tệp và thực hiện phép toán trên chúng, nhưng nó làm cho nhiều so sánh nhanh hơn.
  3. Không có sự khác biệt ở trên : Thực hiện so sánh từng byte của các tệp. Đây là một thử nghiệm chậm để thực hiện, đó là lý do tại sao nó được để lại cho đến khi tất cả các yếu tố loại trừ khác đã được xem xét.

Fdupes làm điều này. Và bạn nên sử dụng phần mềm sử dụng cùng tiêu chí.


7
Theo nghĩa đen, nhiều khả năng ổ cứng của bạn sẽ phá hủy hình ảnh một cách kỳ diệu, hơn là MD5 sẽ va chạm. "Đại diện cho 2 ^ 100.000.000 kết hợp chỉ với 2 ^ 128 kết hợp" - Tôi đồng ý với bạn ở đây. Nếu anh ta có 2 ^ 100.000.000 ảnh, MD5 (hoặc gần như bất kỳ thuật toán băm nào) sẽ rất tệ.
Greg Dean

4
không bảo lãnh, nó chỉ khó . Nó không phải là không thể. Hoàn toàn có thể có 10 tệp tất cả va chạm với nhau, nhưng hoàn toàn khác nhau. Điều này là không thể, nhưng nó có thể xảy ra, vì vậy bạn phải kiểm tra nó.
Kent Fredric

2
kích thước tệp, sau đó là MD5 và chỉ sau đó là byte để kiểm tra byte.
Brad Gilbert

3
@Kent - Tôi đồng ý 100% với bạn. Thật là lười biếng khi coi thường một cái gì đó bởi vì nó rất khó xảy ra, thậm chí là không thể như chúng ta đang nói. Tôi cảm thấy khó chịu nếu một số dữ liệu của tôi bị phá hủy chỉ vì người viết chương trình nghĩ rằng một cái gì đó quá khó có thể làm phiền việc mã hóa.
Joe Taylor

10

Đây là một lớp lót trên các hệ điều hành unix như (bao gồm cả linux) hoặc Windows được cài đặt Cygwin:

find . -type f -print0 | xargs -0 shasum | sort |
  perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
    unlink $file if $sig eq $prev; $prev = $sig'

md5sum (nhanh hơn khoảng 50%) có thể được sử dụng nếu bạn biết rằng không có sự va chạm nào được tạo ra một cách có chủ ý (bạn sẽ có cơ hội trúng 10 giải xổ số lớn hơn cơ hội tìm thấy một vụ va chạm md5 xảy ra tự nhiên.)

Nếu bạn muốn xem tất cả các dups bạn có thay vì loại bỏ chúng, chỉ cần thay đổi unlink $filephần thành print $file, "\n".


1
Bạn cũng có thể sử dụng -print0 và xargs-0 để bắt các khoảng trắng, nhưng find cũng có một tùy chọn -exec hữu ích ở đây: find. -type f -exec shasum {} \; | sắp xếp ... Ngoài ra: Bạn không nên sử dụng @F (-a) vì nó sẽ không hoạt động với không gian. Hãy thử chất nền thay thế.

Cuộc gọi tốt, geocar. Cập nhật câu trả lời với đề xuất của bạn.

"Md5sum (nhanh hơn khoảng 50%) có thể được sử dụng nếu bạn biết rằng không có sự va chạm nào được tạo ra một cách có chủ ý" - chính xác
Greg Dean

6

Tôi đã sử dụng fdupes(viết bằng C) và freedups(Perl) trên các hệ thống Unix và chúng cũng có thể hoạt động trên Windows; cũng có những cái tương tự được tuyên bố là hoạt động trên Windows : dupmerge, liten(được viết bằng Python), v.v.


Phần mềm Perl và Python sẽ hoạt động giống hệt nhau trên các hệ thống Windows và * nix, giả sử chi tiết về hệ thống tệp không quan trọng.
CarlF

2

Để xóa hình ảnh trùng lặp trên Windows, hãy xem Dupli Downloader. Nó có thể so sánh hình ảnh theo nhiều tiêu chí như tên, kích thước và thông tin hình ảnh thực tế.

Đối với các công cụ khác để xóa các tệp trùng lặp, hãy xem bài viết này của Lifehacker .


1

Thay vì Dupli Downloader, hãy thử dự án rẽ nhánh, DeadRinger . Chúng tôi đã sửa một tấn lỗi trong dự án ban đầu, thêm một loạt các tính năng mới và cải thiện đáng kể hiệu năng.


1

Một lựa chọn có thể là Dupkiller .

DupKiller là một trong những công cụ nhanh nhất và mạnh nhất để tìm kiếm và xóa các tệp trùng lặp hoặc tương tự trên máy tính của bạn. Các thuật toán phức tạp, được xây dựng trong cơ chế tìm kiếm của nó, thực hiện các kết quả cao - tìm kiếm tệp nhanh chóng. Rất nhiều tùy chọn cho phép tùy chỉnh linh hoạt tìm kiếm.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.