Cari duplikat file di OSX oleh hash

14

Saya mencari cara untuk mencari file yang menentukan di OSX (Maverick tetapi lebih umum OSX). Secara khusus saya ingin melakukan hal berikut:
diberikan File_001 Saya ingin mencari jika dalam sistem file ada salinan file ini.
Tidak hanya dengan nama yang sama, saya ingin metode perbandingan menjadi algoritma hashing seperti MD5, SHA dll.

Sebagian besar "duplikat file finder" Saya sudah mencoba hanya mencari semua duplikat di drive / sistem. Sebagai gantinya, saya akan tertarik mengirimkan satu file dan mencari duplikatnya.

Adakah yang tahu kalau program seperti itu ada? Mungkin beberapa fungsi Spotlight yang tidak jelas?

nick2k3
sumber
1
Berhati-hatilah terhadap hash yang menentukan apakah file yang diberikan adalah salinan. Pendekatan ini mungkin gagal dengan file .emlx (format file Apple Mail), misalnya. Sebagai bantuan untuk Spotlight, OSX menambahkan metadata ke file email. Email yang sama di dua jalur berbeda mungkin memiliki metadata yang berbeda meskipun Message-idnya sama. Hash berbeda untuk dua file yang berisi email mentah yang sama persis.
John D.

Jawaban:

16

Anda mungkin juga menggunakan fdupes. Itu tidak memiliki opsi untuk mencari duplikat dari file tertentu, tetapi Anda hanya dapat menangkap output untuk nama file:

fdupes -r1 .|grep filename

-rberulang ke direktori dan -1mencetak setiap kelompok file duplikat pada satu baris.

Contoh berguna lainnya:

fdupes -r . menemukan semua file duplikat di bawah direktori saat ini;

fdupes -r . -dN menghapus semua kecuali duplikat pertama dari setiap grup duplikat;

fdupes -r dir1 dir2|grep dir1/|xargs rmmenghapus duplikat di dir1.

Anda dapat menginstal fdupesdengan brew install fdupes.

Lri
sumber
Apakah mungkin untuk memiliki daftar file yang BUKAN duplikat di direktori saat ini?
gagarine
7

Anda dapat dengan mudah membangun ini sendiri dengan beberapa perintah shell:

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    akan membangun daftar hash md5 di atas semua file Anda.

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    akan mencari hash md5 dari FILE-TO-SEARCH

Menjalankan perintah pertama (terutama jika Anda menjalankannya di seluruh disk) akan memakan waktu lama.


Jika Anda hanya ingin mencari satu file, Anda juga dapat menggunakan

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done
nohillside
sumber
Pass pertama haruslah ditemukan dengan operasi ukuran yang tepat.
user188421
@biziclop Jika Anda hanya ingin mencari satu file, ya. Jika Anda ingin mencari beberapa lebih cepat untuk membangun indeks sekali dan hanya mencari melalui file indeks sesudahnya.
nohillside
1
Memang benar, saya hanya memperhatikan kalimat ini dalam pertanyaan: "Saya, sebaliknya, tertarik untuk mengirimkan satu file dan mencari duplikatnya."
user188421
fdupes harus lebih cepat, pertama-tama melakukan perbandingan tanggal, lalu sebagian hash, kemudian hash penuh.
gagarine
1

Ini akan berfungsi jika Anda mengganti ukuran dan hash untuk FILE_001 ke dalam perintah.

198452 byte adalah ukuran file yang saya gunakan dan hash file md5 adalah 3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

Outputnya akan berupa daftar file dengan nama path relatif ke direktori yang dikirim ke perintah find.

Pendekatan ini memiliki keuntungan bahwa itu hanya akan memiliki file hash yang cocok dengan ukuran aslinya dan hanya akan menampilkan nama file yang cocok dengan hash.

John D.
sumber
0

Jika Anda tidak ingin mengacaukan skrip, Anda bisa mendekati perilaku yang Anda inginkan dengan Araxis Cari File Duplikat $ 10 di Mac App Store . Ada juga demo 7 hari di situs web mereka. Temukan File Duplikat mencari dupes dengan menghitung hash untuk setiap file.

Anda dapat memperkirakan perilaku yang Anda inginkan Anda akan mengatur folder dengan satu file yang Anda khawatirkan, kemudian menambahkan folder yang ingin Anda cari. Ini juga akan melaporkan dupes lain, jika ada, di jalur pencarian.

Aplikasi ini memiliki banyak fitur penyortiran yang bagus sehingga hasilnya sangat mudah dimengerti.

Bahtera Ƭ
sumber