खोज फ़ाइल हैश द्वारा OSX में डुप्लिकेट


14

मैं OSX (Maverick लेकिन अधिक सामान्यतः OSX) में एक दृढ़ संकल्प फ़ाइल के लिए खोज करने के लिए एक रास्ता खोज रहा हूँ। विशेष रूप से मैं निम्नलिखित करना चाहूंगा:
किसी File_001 को मैं खोजना चाहता हूं कि क्या फाइल सिस्टम में इस फाइल की एक प्रति मौजूद है।
सिर्फ इसी नाम से नहीं, मैं तुलना विधि को हैशिंग एल्गोरिथ्म जैसे एमडी 5, एसएचए इत्यादि में शामिल करना चाहूंगा।

अधिकांश "डुप्लिकेट फ़ाइल खोजक" मैंने ड्राइव / सिस्टम में सभी डुप्लिकेट के लिए बस खोज करने की कोशिश की है। इसके बजाय, मैं एक फ़ाइल सबमिट करने और इसके डुप्लिकेट की खोज करने में रुचि रखूंगा।

किसी को पता है कि क्या इस तरह के कार्यक्रम मौजूद है? शायद स्पॉटलाइट के कुछ अस्पष्ट कार्य?


1
किसी निर्धारित फ़ाइल की प्रतिलिपि है या नहीं यह निर्धारित करने वाले हैश से सावधान रहें। उदाहरण के लिए .emlx फ़ाइलों (Apple मेल की फ़ाइल स्वरूप) के साथ यह दृष्टिकोण विफल हो सकता है। स्पॉटलाइट की सहायता के रूप में, OSX मेल फ़ाइलों के लिए मेटाडेटा संलग्न करता है। दो अलग-अलग रास्तों में एक ही ईमेल के अलग-अलग मेटाडेटा हो सकते हैं, भले ही मैसेज-आईडी एक ही हो। अलग-अलग हैश में एक ही कच्चे ईमेल वाली दो फ़ाइलों के लिए।
जॉन डी।

जवाबों:


17

आप भी उपयोग कर सकते हैं fdupes। इसमें किसी विशिष्ट फ़ाइल के डुप्लिकेट की खोज करने का विकल्प नहीं है, लेकिन आप फ़ाइल नाम के लिए आउटपुट को केवल grep कर सकते हैं:

fdupes -r1 .|grep filename

-rनिर्देशिकाओं में पुनरावृत्ति करता है और -1डुप्लिकेट फ़ाइलों के प्रत्येक समूह को एक लाइन पर प्रिंट करता है।

अन्य उपयोगी उदाहरण:

fdupes -r . वर्तमान निर्देशिका के तहत सभी डुप्लिकेट फ़ाइलें पाता है;

fdupes -r . -dN डुप्लिकेट के प्रत्येक समूह से पहले डुप्लिकेट को छोड़कर सभी को हटा देता है;

fdupes -r dir1 dir2|grep dir1/|xargs rmमें डुप्लिकेट निकालता है dir1

आप के fdupesसाथ स्थापित कर सकते हैं brew install fdupes


1
क्या ऐसी फ़ाइलों की सूची संभव है जो वर्तमान निर्देशिका में डुप्लिकेट नहीं हैं?
गागरिन

7

आप इसे आसानी से कुछ शेल कमांड के साथ खुद बना सकते हैं:

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

    आपकी सभी फाइलों पर md5 हैश की सूची बनाएगा।

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

    FILE-TO-SEARCH के md5 हैश की खोज करेगा

पहला कमांड चलाना (विशेषकर यदि आप इसे पूरी डिस्क पर चलाते हैं) हालांकि इसमें लंबा समय लगेगा।


यदि आप केवल एक फ़ाइल खोजना चाहते हैं, तो आप भी उपयोग कर सकते हैं

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

बहुत पहले पास सटीक आकार के ऑपरेशन द्वारा ढूंढना चाहिए।
biziclop

@biziclop यदि आप केवल एक फ़ाइल की खोज करना चाहते हैं, तो हाँ। यदि आप कई बार खोज करना चाहते हैं तो सूचकांक को एक बार बनाना और बस बाद में सूचकांक फ़ाइल के माध्यम से खोज करना है।
nohillside

1
यह बिल्कुल सही है, मैंने अभी इस वाक्य पर ध्यान दिया है: "मैं, इसके बजाय, एक फ़ाइल सबमिट करने और इसके डुप्लिकेट की खोज करने में दिलचस्पी लूंगा।"
बिजिकलोप

fdupes को तेज होना चाहिए, यह पहले दिनांक तुलना, फिर आंशिक हैश, फिर पूर्ण हैश करता है।
गागरिन

1

यदि आप कमांड में FILE_001 के लिए आकार और हैश का विकल्प देते हैं तो यह काम करना चाहिए।

198452 बाइट्स मेरे द्वारा उपयोग की गई फ़ाइल का आकार है और फ़ाइल md5 हैश 3915dc84b4f464d0d550113287c8273b है

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

आउटपुट फाइंड कमांड को भेजे गए डायरेक्टरी के सापेक्ष पथ नामों वाली फाइलों की एक सूची होगी।

इस दृष्टिकोण का यह फायदा है कि इसमें केवल हैश फाइलें होती हैं जो आपके मूल के आकार से मेल खाती हैं और केवल हैश से मेल खाने वाले फ़ाइल नाम को आउटपुट करती हैं।


0

यदि आप स्क्रिप्ट के साथ गड़बड़ नहीं करना चाहते हैं, तो आप मैक ऐप स्टोर में आराक्सिस फाइंड डुप्लिकेट फाइल्स $ 10 के साथ अपने इच्छित व्यवहार के करीब पहुँच सकते हैं । उनकी वेब साइट पर 7 दिन का डेमो भी है। प्रत्येक फ़ाइल के लिए हैश की गणना करके डुप्लिकेट फ़ाइलों की खोज करें।

आप अपने इच्छित व्यवहार के बारे में अनुमान लगा सकते हैं कि आप जिस एकल फ़ाइल के बारे में चिंतित हैं, उसके साथ एक फ़ोल्डर स्थापित करेंगे, फिर उन फ़ोल्डरों को जोड़ें जिन्हें आप खोजना चाहते हैं। यह अन्य दुपट्टों की भी रिपोर्ट करेगा, यदि कोई खोज पथ में हैं।

इस ऐप में कई अच्छे सॉर्टिंग फीचर्स हैं जो परिणामों को समझने में बहुत आसान हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.