DIFF उपयोगिता 2 फ़ाइलों के लिए काम करती है। एक बार में 2 से अधिक फ़ाइलों की तुलना कैसे करें?


84

इसलिए यूटिलिटी डिफ ठीक उसी तरह काम करता है जैसे मैं 2 फाइलों के लिए चाहता हूं, लेकिन मेरे पास एक प्रोजेक्ट है जिसमें एक समय में 2 से अधिक फाइलों के साथ तुलना की आवश्यकता होती है, शायद एक समय में 10 तक। इसके लिए उन सभी फाइलों को एक-दूसरे के साथ-साथ रखना आवश्यक है। मेरे शोध ने वास्तव में कुछ भी नहीं किया है, एक समय में 4 की तुलना करने की क्षमता के साथ vimdiff सबसे अच्छा प्रतीत होता है।

मेरा प्रश्न: क्या एक समय में 2 से अधिक फ़ाइलों की तुलना करने के लिए कोई उपयोगिता है, या हैक करने का एक तरीका है भिन्न / vimdiff ताकि यह कई तुलनाएं कर सके? जिन फाइलों की मैं तुलना कर रहा हूं, वे अपेक्षाकृत कम हैं, इसलिए यह बहुत धीमी नहीं होनी चाहिए।

अग्रिम में धन्यवाद!

जवाबों:


111

10 फाइलों को अगल-बगल प्रदर्शित करना और अंतर को उजागर करना डिफ्यूज के साथ आसानी से किया जा सकता है । बस इस तरह कमांड लाइन पर सभी फाइलें निर्दिष्ट करें:

diffuse 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt


1
वाह यह कमाल है! प्रतिक्रिया के लिए धन्यवाद देर से भी, मुझे अभी भी मदद की ज़रूरत थी।
जावेद अहमद

1
इस तरह की तुलना को क्या कहा जाता है?
leeand00

4
शानदार उपकरण; बस मुझे एक समस्या को हल करने में मदद की। मुझे पता है कि यह एक पुराना जवाब है, लेकिन धन्यवाद!
सीनकेलेन

एक हजार बार धन्यवाद! कॉपी-पेस्ट की गई फ़ाइलों के एक समूह में छोटे अंतर का पता लगाने में बहुत मदद की।
Trass3r

1
@Gruber - मुझे एक बुरे समय में लिंक को हिट करना चाहिए - मैंने अपनी टिप्पणी हटा दी है
मुकाबला

28

विम पहले से ही ऐसा कर सकते हैं:

vim -d file1 file2 file3

लेकिन आप सामान्य रूप से 4 फ़ाइलों तक सीमित हैं। हालांकि, विम के स्रोत में एक भी लाइन को संशोधित करके आप इसे बदल सकते हैं। निरंतर DB_COUNTकी अधिकतम संख्या को परिभाषित करता है diff एड फ़ाइलें, और यह के ऊपर की ओर परिभाषित किया है diff.cजिस तरह से दो तिहाई के बारे में नीचे में संस्करणों 6.x और पहले, या structs.hसंस्करण 7.0 और ऊपर में।


vimdiff या vim -d कम से कम मेरे कंप्यूटर पर एक समय में केवल 4 फाइलें कर सकता है। किसी को पता है कि यह कैसे बायपास करने के लिए?
जावेद अहमद

मैंने उस प्रश्न में इसका उल्लेख नहीं किया। विम की सीमा बदलने पर निर्देश शामिल करने के लिए अद्यतन किया गया।
नोआ मेडलिंग

अरे, क्या आप जानते हैं कि वास्तव में स्ट्राइकशीट या diff.c कैसे प्राप्त करें? मैं विन या लिनक्स पर विम स्रोत कोड नहीं ढूँढ सकता।
जावेद अहमद

vim दो से अधिक निर्देशिकाओं के लिए निर्देशिका तुलना करने में सक्षम नहीं लगता है, जो उपयोगिता को सीमित करता है। एक और सीमा यह है कि जब फाइलों की एक-दूसरे से तुलना की जाती है तो आप केवल फाइल के बाईं ओर देख सकते हैं, सब कुछ देखने के लिए कोई स्क्रॉल बार नहीं हैं। और परिवर्तनों को आगे और पीछे धकेलने के लिए कोई GUI विधि नहीं है।
जेरीम गुएंथेर

7

diffबिल्ट-इन ऑप्शन --from-fileऔर है --to-file, जो एक ऑपरेंड की तुलना अन्य सभी से करता है।

   --from-file=FILE1
          Compare FILE1 to all operands.  FILE1 can be a directory.

   --to-file=FILE2
          Compare all operands to FILE2.  FILE2 can be a directory.

काश मुझे यह वास्तविक फ़ाइल पथों के बजाय प्रक्रिया प्रतिस्थापन के साथ काम करने के लिए मिल सके।
Jan Kyu Peblik

1
@JanKyuPeblik आप zsh उपयोग करते हैं, = बाहर की जाँच (...) प्रक्रिया प्रतिस्थापन है कि एक अस्थायी फ़ाइल और कहा कि अस्थायी फ़ाइल के नाम से फैलता करने के लिए उत्पादन लिखते हैं के रूप zsh.sourceforge.net/Doc/Release/...
एरिक

2

चेकआउट "बियॉन्ड तुलना": http://www.scootersoftware.com/

यह आपको संपूर्ण निर्देशिका फ़ाइलों की तुलना करने देता है, और ऐसा लगता है कि यह लिनक्स पर भी चलता है।


1
diff -r भी फ़ाइलों की संपूर्ण निर्देशिकाओं की तुलना करता है, लेकिन यह कभी-कभी फ़ाइलों को एक डाइरेक्ट्री से दूसरी निर्देशिका की फ़ाइलों के विरुद्ध तुलना करता है
reinierpost

6
बियॉन्ड तुलना एक शानदार उपकरण है, और मैं इसे हर समय मर्ज संघर्ष को हल करने के लिए उपयोग करता हूं। हालाँकि यह इस काम के लिए सही उपकरण नहीं है, क्योंकि यह केवल दो फाइलों की तुलना प्रत्येक अभिभावक या एक सामान्य पूर्वज के खिलाफ कर सकता है।
सुपर जूल

-1 के लिए क्षमा करें, लेकिन यह कई फाइलों को एक दूसरे से तुलना करने के बारे में है।
मनोहर रेड्डी पोरेड्डी

1

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


हाँ, लेकिन अगर मैं उदाहरण के लिए 3 फाइलों की तुलना कर रहा था, तो मैं चाहता हूं कि वे सभी अन्य 2 फाइलों में से प्रत्येक के खिलाफ अलग-अलग हो सकते हैं, क्योंकि यह अलग है कि जहां वे मैच करते हैं, यह देखने के लिए।
जावेद अहमद

मुझे यह कमांड मिली जो आपकी स्क्रिप्ट, इसके डिफ 3 और कथित तौर पर तीन फाइलों की तुलना करने के लिए इसकी उपयोगिता के साथ मदद कर सकती है। linux.about.com/library/cmd/blcmdl1_diff3.htm विंडोज़ वर्जन यहाँ पाया जा सकता है gnuwin32.sourceforge.net/packages/diffutils.htm
बेंजामिन नील

0

मुख्य सवाल का जवाब नहीं है, लेकिन यहां के लिए कुछ इसी तरह है क्या बेंजामिन नील का सुझाव दिया है लेकिन diff सभी फाइलों को ing:

एक सरणी में फ़ाइल नाम स्टोर करें, फिर आकार दो के संयोजन पर लूप करें और अलग-अलग करें (या जो भी आप चाहते हैं)।

files=($(ls -d /path/of/files/some-prefix.*))     # Array of files to compare
max=${#files[@]}                                  # Take the length of that array
for ((idxA=0; idxA<max; idxA++)); do              # iterate idxA from 0 to length
  for ((idxB=idxA + 1; idxB<max; idxB++)); do     # iterate idxB + 1 from idxA to length
    echo "A: ${files[$idxA]}; B: ${files[$idxB]}" # Do whatever you're here for.
  done
done

@ Charles-duffy के उत्तर से व्युत्पन्न : https://stackoverflow.com/a/46719215/1160428


0

ऐसा करने का एक अच्छा तरीका है = GREP।

पाठ के आकार के आधार पर आप इसे कॉपी और पेस्ट कर सकते हैं, या आप फ़ाइल के इनपुट को grep कमांड पर पुनर्निर्देशित कर सकते हैं। यदि आप एक रिवर्स खोज या grep -ir / पथ बनाने के लिए एक grep -vir / path बनाते हैं। प्रमाणन परीक्षा के लिए यह मेरा तरीका है।

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