2011-12-30 13 views
9

मेरे पास 3 बाइनरी फ़ाइलें हैं। आइए उन्हें file1.bin, file2.bin और file3.bin पर कॉल करें।3 बाइनरी फाइलों के लिए डिफ

  • file1.bin और file2.bin कुछ सामान्य भाग हैं।
  • file2.bin और file3.bin कुछ सामान्य भागों हैं।

मैं file1.bin और file2.bin कि file2.bin और file3.bin के बीच अलग हैं के बीच आम भागों लगाना चाहते हैं।

आप इसे पूरा करने की सलाह कैसे देते हैं? मैंने xxd का उपयोग करके बाइनरी फ़ाइलों को टेक्स्ट फ़ाइलों में पहले से ही डंप कर दिया है और फिर vim -d file1.txt file2.txt file3.txt का उपयोग करके 3-तरफा diff किया है।

हालांकि, vim सभी फ़ाइलों में परिवर्तित होने के रूप में एक हिस्सा को चिह्नित करता है भले ही यह केवल एक फ़ाइल में बदल गया हो और अन्य दो फाइलों में भी बना रहता है। मैं उन विशेष प्रकार की घटनाओं को अलग-अलग चिह्नित करना चाहता हूं।

उत्तर

6

शायद आप अंतर्निर्मित यूनिक्स diff (मुझे लगता है कि यह ओएसएक्स का हिस्सा है) का उपयोग कर सकते हैं, लेकिन समानताओं को सूचीबद्ध करने के लिए --unchanged-group-format का उपयोग करें। फ़ाइल 1 और फ़ाइल 2 के लिए ऐसा करें। फिर इसे फ़ाइल 2 और फ़ाइल 3 के लिए करें। फिर आप दो परिणामी फाइलों पर एक नियमित अंतर कर सकते हैं।

समानताएं प्राप्त करने के तरीके के बारे में, this post पर एक नज़र डालें।

-1

क्रोमियम bsdiff का उपयोग करता है, फिर अपने ब्लॉग here में बताए अनुसार बाइनरी diff करने के लिए courgette पर स्विच किया जाता है। आपको उनके ब्लॉग से उपयोगी लीड मिल सकती हैं।

+0

क्या समस्या में वर्णित तरीके से यह 3 तरीके भिन्न हो सकता है? मैं नहीं पता कि कैसे, आप इसका वर्णन करेंगे? – Dimme

+0

bsdiff बाइनरी फ़ाइलों पर काम करता है, और बाइनरी पैच का उत्पादन करता है। vimdiff टेक्स्ट फ़ाइलों को इसके इनपुट के रूप में उम्मीद करता है, इसलिए मैं बीएसडीएफ को जिस तरीके से आप यहां चाहूंगा, उसे बनाने का तरीका नहीं सोच सकता। एक विकल्प के रूप में, देखें कि बाइनरी फाइलों के लिए शिकारी उत्पन्न करते समय भिन्न प्रोग्राम के लिए अतिरिक्त सेटिंग का उपयोग करने के लिए आप 'v' diffexpr''' विकल्प का उपयोग कर सकते हैं - शायद '' -I'' विकल्प का उपयोग करें "लाइन" के लिए रेगेक्स निर्दिष्ट करने के लिए 'diff''' को अलग करने के दौरान अनदेखा किया जाना चाहिए। – holygeek

0

मैं जिस उपकरण के लिए काम करता हूं (ECMerge) वह करता है। आपको बस 3 बाइनरी फाइलों को अलग करना होगा, यह एक दूसरे के सामने बराबर भाग पेश करेगा, और संशोधित बाइट्स को उचित रूप से बीच में रखा जाएगा। पहले हेक्स डंप प्राप्त करने की आवश्यकता नहीं है। आप अलग-अलग परिणामों और फ़ाइलों में बाइट्स के आधार पर जो कुछ भी पसंद करते हैं उसे आउटपुट करने के लिए जावास्क्रिप्ट में स्क्रिप्ट कर सकते हैं (यह कमांड लाइन में भी काम करता है)।

संबंधित मुद्दे