Chương trình xóa các tệp trùng lặp chính xác trong khi lưu trữ kết quả tìm kiếm


1

Chúng tôi cần một chương trình Windows 7 để loại bỏ / kiểm tra các bản sao nhưng tình huống của chúng tôi hơi khác so với chương trình chuẩn có đủ chương trình.

Chúng tôi có một khá lớn tĩnh lưu trữ (bộ sưu tập) hình ảnh trải rộng trên một số đĩa. Hãy gọi chúng là Đĩa A..M. Chúng tôi cũng có một số đĩa (hãy gọi chúng là Đĩa 1..9) có chứa một số trùng lặp được tìm thấy trên các đĩa A..M.

Chúng tôi muốn thêm vào bộ sưu tập đĩa mới của mình (N, O, P ... aso.) Sẽ chứa ảnh từ đĩa 1..9, nhưng, tất nhiên, chúng tôi không muốn có bất kỳ ảnh nào hai (hoặc nhiều hơn ) lần.

Tất nhiên, về mặt lý thuyết, tác vụ có thể được giải quyết bằng một trình loại bỏ tệp trùng lặp thông thường nhưng thời gian cần thiết sẽ rất lớn.

Lý tưởng nhất là AFAIS bây giờ, giải pháp thực sự sẽ là một chương trình sẽ quét các đĩa A..M, lưu trữ kích thước / băm của ảnh trong cơ sở dữ liệu / tệp được lập chỉ mục và sẽ kiểm tra các đĩa mới (1 .. 9) chống lại cơ sở dữ liệu này.

Tuy nhiên tôi có thời gian khó để tìm một chương trình như vậy (nếu tồn tại).

Những điều khác cần lưu ý:

  • chúng tôi cho rằng Đĩa A..M (bộ sưu tập) không có bất kỳ bản sao nào trên chúng
  • tên tập tin có thể được thay đổi
  • chúng tôi không quan tâm đến so sánh gần đúng (mờ) có thể được tìm thấy trong một số chương trình so sánh ảnh. Chúng tôi săn lùng chính xác trùng lặp tập tin.
  • chúng tôi không sợ dòng lệnh. :-)
  • chúng ta cần làm việc trên Win7 / XP
  • chúng tôi thích (tất nhiên) là phần mềm miễn phí

Có bao nhiêu tệp và byte trên đĩa A..M?
Dennis

@Dennis: Bạn có cần một con số chính xác? Ước tính sẽ là: 400-500k tệp mất ~ 4-5 TB
John Thomas

Tôi đã thử một vài công cụ (hầu hết đã được liệt kê đây ), nhưng dường như không ai làm chính xác bạn muốn gì. Một cách tiếp cận dựa trên dòng lệnh có lẽ là giải pháp tốt nhất, nhưng tôi cần thêm thông tin để đề xuất một phương pháp. 1) Bạn có thể truy cập các đĩa cùng một lúc? 2) Có bao nhiêu đĩa A..M và 1..9? 3) Đây có phải là việc một lần hay bạn muốn lưu trữ cơ sở dữ liệu để sử dụng trong tương lai?
Dennis

Trả lời: 1.) Không, tôi không thể truy cập các đĩa cùng một lúc. Nhưng, tốt, có lẽ một loại bùn có thể được sử dụng. 2.) Bây giờ chúng ta có 5 (năm) đĩa ổn (các đĩa A..M trong ví dụ của tôi) nhưng số lượng đĩa "không xác định" cần kiểm tra. Tuy nhiên, tôi ước tính số lượng các đĩa này (IOW các đĩa 0..9 trong ví dụ của tôi) đến 5-6. 3.) Có, tôi muốn lưu trữ db để sử dụng trong tương lai. Tuy nhiên tôi nghĩ (ok, tôi hy vọng) rằng việc "dọn dẹp chính" sẽ chỉ xảy ra một lần.
John Thomas

1
Và tôi thấy rằng có vẻ như ai đó đã thức dậy nhu cầu: trùng lặp-file-detective.com/v4/new.htm (Tôi có không phải đã thử nó, tôi chỉ vấp vào nó.)
Loren Pechtel

Câu trả lời:


3

Dựa trên giải pháp Dennis, chúng tôi quyết định sử dụng băm bộ cũng có sẵn trên Windows.

Cách sử dụng cơ bản:

Bước 1. Tạo băm (điều này chỉ nên được thực hiện một lần)

hashdeep64 -c tiger -r "D:\*" > Disk_D.hash

Chúng tôi sử dụng con hổ như một hàm băm - nhanh hơn và tốt hơn SHA-1 (không va chạm).

Bước 2: Săn tìm các bản sao (điều này phải được thực thi cho mỗi ổ đĩa / thư mục để kiểm tra)

hashdeep64 -k Disk_D.hash -m -r "E:\My-Dir-To-Check\*" > Dupes.txt

Bây giờ tất cả các bản sao được lưu trữ trong Dupes.txt

Bạn có thể sử dụng MsWord, LibreScript hoặc Notepad ++ (hoặc bất kỳ cách nào khác mà bạn biết) để chèn del (và / hoặc bất kỳ tùy chọn nào khác) trong tệp văn bản này để xóa các tệp. Bạn có đây đủ các biến thể, bao gồm một tệp .bat đơn giản để quét danh sách tệp để xóa tất cả các mục.

Ngoài ra, bạn có thể chọn xem lại danh sách tập tin và xử lý thủ công.


2

Tiếp cận

  1. Chọn một hàm băm không va chạm.

    Ví dụ của tôi sử dụng SHA1, vì nút cổ chai sẽ là ổ cứng.

    Nếu việc đó mất quá nhiều thời gian, có thể chỉ so sánh megabyte đầu tiên của tệp. Cái đó Nên là đủ cho hình ảnh.

  2. Đọc các tệp quan tâm trên các đĩa A..M, tính toán giá trị băm của chúng và lưu trữ chúng trong một tệp cụ thể cho đĩa đó (để bạn có thể thêm / xóa đĩa sau).

  3. Đọc các tệp quan tâm trên các đĩa 1..9 và tính băm của chúng.

    Nếu băm của tệp đã được biết, thực hiện hành động (liệt kê hoặc xóa).

Thiết lập

  1. Tải xuống và cài đặt Cygwin , một bộ công cụ cung cấp môi trường giao diện Linux cho Windows.

  2. Trong Windows Explorer, mở thư mục %ProgramFiles(x86)%\Cygwin\home\%USERNAME%.

  3. Chỉnh sửa tập tin .bashrc và nối dòng sau:

    export PATH=~:$PATH
    
  4. Tạo một tập tin gọi là hashdrive và lưu đoạn mã sau vào nó:

    #!/bin/bash
    
    DRIVELETTER=$(echo $1 | tr '[:upper:]' '[:lower:]')
    EXTENSIONS=$(echo $2 | sed 's/,/\\|/g')
    DRIVENAME=$(echo $3 | tr '[:upper:]' '[:lower:]')
    
    set -e
    [ -d /cygdrive/$DRIVELETTER ] || (echo "Drive $DRIVELETTER: does not exist." ; exit 1)
    [ -f ~/drives/$DRIVENAME ] && (echo "Hashfile for drive $DRIVENAME already exists." ; exit 1)
    set +e
    
    mkdir ~/drives 2>/dev/null
    find /cygdrive/$DRIVELETTER -type f -iregex ".*\.\($EXTENSIONS\)" -exec sha1sum {} \; | cut -b -40 > ~/drives/$DRIVENAME
    
  5. Tạo một tập tin gọi là checkdrive và lưu đoạn mã sau vào nó:

    #!/bin/bash
    
    DRIVELETTER=$(echo $1 | tr '[:upper:]' '[:lower:]')
    EXTENSIONS=$(echo $2 | sed 's/,/\\|/g')
    ACTION=$(echo $3 | tr '[:upper:]' '[:lower:]')
    
    set -e
    [ -d /cygdrive/$DRIVELETTER ] || (echo "Drive $DRIVELETTER: does not exist." ; exit 1)
    set +e
    
    IFS=":" ; for FILE in `find /cygdrive/$DRIVELETTER -type f -iregex ".*\.\($EXTENSIONS\)" -printf %p:`; do
        [ "$(grep -m 1 $(sha1sum "$FILE" | cut -b -40) ~/drives/*)" ] && $ACTION "$FILE"
    done
    

Sử dụng

  • Để lưu băm của tất cả các hình ảnh của một đĩa nhất định vào một tệp, hãy khởi động Cygwin và thực hiện lệnh sau:

    hashdrive DRIVELETTER EXTENSIONS DRIVENAME
    

    Ví dụ: nếu DiskA được gắn dưới dạng ổ đĩa D: và bạn muốn băm tất cả các hình ảnh với phần mở rộng jpgpng, sử dụng lệnh sau:

    hashdrive d jpg,png diska
    

    Phải có Không không gian trong jpg,png.

  • Để kiểm tra đĩa cho hình ảnh trùng lặp, khởi động Cygwin và thực hiện lệnh sau:

    hashdrive DRIVELETTER EXTENSIONS ACTION
    

    Ví dụ: nếu Disk1 được gắn dưới dạng ổ đĩa E: và bạn muốn liệt kê tất cả các hình ảnh trùng lặp với phần mở rộng jpgpng, sử dụng lệnh sau:

    checkdrive e jpg,png echo
    

    Nếu bạn muốn loại bỏ các tập tin trực tiếp, sử dụng rm thay vì echo.

  • Để xóa đĩa khỏi cơ sở dữ liệu, chỉ cần xóa tệp DRIVENAME trong thư mục %ProgramFiles(x86)%\Cygwin\home\%USERNAME%\drive.

Thận trọng

Các rm lệnh nào không phải di chuyển tệp vào Thùng rác; nó xóa chúng trực tiếp.

Mặc dù có thể khôi phục các tệp bằng mọi cách, hãy cẩn thận khi sử dụng rm hành động và cố gắng echo trước khi sử dụng rm.


Tôi đang nhận được kết quả hỗn hợp. Trên máy Linux của tôi, mọi thứ chạy nhanh hơn 9 lần so với trên máy Win7 của tôi. tôi mong đó là do các ổ đĩa cứng của máy Linux nhanh hơn, nhưng cũng có thể mọi thứ chạy trơn tru hơn thực Linux. Những cải tiến có thể có: 1) Nếu hashdrive chạy quá chậm (tôi không có cách nào để kiểm tra điều này từ đây), nó có thể được thực hiện nhanh hơn bằng cách băm chỉ megabyte đầu tiên của mỗi tệp. Cái đó Nên là đủ cho hình ảnh. 2) checkdrive có thể được thực hiện nhanh hơn bằng cách nhóm băm trong xô. Tôi sẽ kiểm tra vào ngày mai nếu nó có tác động của thị trưởng.
Dennis

Cảm ơn rất nhiều - Theo cách lỏng lẻo giải pháp của bạn, tôi đã đăng một giải pháp Windows đầy đủ / nguyên gốc (ok, thực sự là đa nền tảng, vì hashdeep cũng chạy trên * nixes). Ngoài ra, tôi đã chọn không đóng gói các lệnh trong các tệp .bat vì các lệnh này khá đơn giản. Dù sao cũng cảm ơn rất nhiều. Nâng cao.
John Thomas

Btw, Dennis SHA-1 không va chạm. Xem vi.wikipedia.org/wiki/Sha-1 ... nhưng đối với các tập tin hàng ngày là đủ. Tôi đã chọn hổ để tăng tốc.
John Thomas

SHA-1 bị hỏng (yêu cầu bảo mật ban đầu là 80 bit đã giảm xuống còn 53 bit), nhưng cho đến nay vẫn chưa có sự va chạm thực sự nào được tìm thấy.
Dennis
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.