diff कमांड Linux shell से फ़ाइलों या डायरेक्ट्रीज की तुलना करने का एक आसान तरीका है। यह लेख आपको दिखाएगा कि इसका उपयोग कैसे करें, कुछ सामान्य उपयोग के उदाहरणों के साथ।
diff कमांड दो फ़ाइलों या डायरेक्ट्रीज की लाइन-दर-लाइन तुलना करता है और उनके बीच के अंतर को आउटपुट करता है।
आप फ़ाइलों या डायरेक्ट्रीज की तुलना क्यों करना चाहेंगे?
- आपके पास एक ही नाम की दो फ़ाइलें हो सकती हैं जो समान दिखती हैं और आप उनके बीच का अंतर देखना चाहते हैं।
- आपके द्वारा बनाए जा रहे प्रोजेक्ट में प्रोग्रामिंग कोड में नए और पुराने संस्करण के बीच परिवर्तनों की तुलना करना।
- आपने कई फ़ाइलों को दूसरे ड्राइव पर कॉपी किया है और यह सुनिश्चित करना चाहते हैं कि सब कुछ सफलतापूर्वक और बिना करप्शन के कॉपी हो गया है।
- आप और एक मित्र दोनों के पास एक फ़ोल्डर में फ़ाइलों का एक ही सेट है। आपने अपने में परिवर्तन किए हैं, लेकिन उन सभी को फिर से अपने मित्र को नहीं भेजना चाहते। आप diff का उपयोग करके केवल उन फ़ाइलों में किए गए परिवर्तनों वाला एक पैच बना सकते हैं, इसे उन्हें भेज सकते हैं, और फिर पूरे डेटासेट या एप्लिकेशन को फिर से डाउनलोड किए बिना उनकी कॉपी को अपडेट कर सकते हैं।
फ़ाइलों की तुलना करने के आपके अपने कारण होंगे, तो चलिए diff और इसके उपयोग पर चलते हैं।
diff सिंटैक्स
diff OPTIONS FILES
ध्यान दें कि:
- OPTIONS वैकल्पिक हैं और नीचे दी गई तालिका से प्रदान किए जा सकते हैं
- FILES तुलना की जाने वाली दो फ़ाइलों का पथ है, जो स्पेस द्वारा अलग किए गए हैं
diff विकल्प
यहाँ यूजर मैनुअल से सीधे diff कमांड के लिए सबसे अधिक उपयोग किए जाने वाले OPTIONS हैं:
| विकल्प | विवरण |
|---|---|
| -q, –brief | केवल तब रिपोर्ट करें जब फ़ाइलें भिन्न हों |
| -s, –report-identical-files | रिपोर्ट करें जब दो फ़ाइलें समान हों |
| -u, -U NUM, –unified[=NUM] | NUM (डिफ़ॉल्ट 3) लाइन्स का यूनिफाइड कॉन्टेक्स्ट आउटपुट करें |
| -N –new-file | अनुपस्थित फ़ाइलों को खाली मानें |
| -l, –paginate | 'pr' के माध्यम से आउटपुट पास करके पेजिनेट करें |
| -r, –recursive | पाए गए किसी भी सबडायरेक्ट्रीज को रिकर्सिवली तुलना करें |
| –no-dereference | सिम्बोलिक लिंक्स को फॉलो न करें |
| -a, –text | सभी फ़ाइलों को टेक्स्ट मानें |
| -d, –minimal | परिवर्तनों का एक छोटा सेट खोजने के लिए कड़ी मेहनत करें |
| –speed-large-files | बड़ी फ़ाइलों और कई बिखरे हुए छोटे परिवर्तनों को मानें |
आप यहां पूर्ण मैनुअल देख सकते हैं या चलाएं:
man diff
…कमांड लाइन से विकल्पों का पूरा सेट पाने के लिए।
उदाहरण
Linux में diff से फ़ाइलों की तुलना
यह diff कमांड का सबसे सरल उपयोग है और दो सप्लाई की गई फ़ाइलों के बीच के अंतर को कंसोल पर आउटपुट करेगा:
diff file1.txt file2.txt
आउटपुट को रीडायरेक्ट करना
यदि आप केवल अंतर देखना चाहते हैं बजाय पैच बनाने के, तो आउटपुट को फ़ाइल में रीडायरेक्ट करना उपयोगी है – ताकि टर्मिनल बहुत सारे परिवर्तनों होने पर किसी भी परिवर्तन को काट न दे:
diff -q file1.txt file2.txt > differences.txt
यह differences.txt बनाएगा (या ओवरराइट करेगा!), जो दो फ़ाइलों के बीच के अंतर को सारांशित करेगा।
-q विकल्प जोड़ा गया है ताकि केवल अंतर सूचीबद्ध हों; समान फ़ाइलों का उल्लेख नहीं किया जाएगा ताकि यह देखना आसान हो कि क्या हो रहा है।
diff से डायरेक्ट्रीज की तुलना करना
डायरेक्ट्रीज की तुलना भी -r (रिकर्सिव) विकल्प का उपयोग करके उनकी सामग्री की तुलना करके की जा सकती है:
diff -r -q /path/to/dir1 /path/to/dir2
फिर से, मैंने यहां -q विकल्प का उपयोग किया है ताकि केवल अंतर सूचीबद्ध हों।
बड़ी फ़ाइलों या बड़ी फ़ाइलों वाली डायरेक्ट्रीज की तुलना
diff एक गहन प्रक्रिया है – तुलना की जा रही हर फ़ाइल को पढ़ने और तुलना करने की आवश्यकता होती है। इसमें समय लग सकता है।
–speed-large-files विकल्प diff के एल्गोरिदम को बदल देता है ताकि यह अधिक कुशल हो अगर आप बड़ी फ़ाइलों की तुलना कर रहे हैं – चीजों को थोड़ा तेज कर देता है।
फ़ाइल के लिए पैच बनाना
एक पैच बनाने के लिए – दो फ़ाइलों के बीच अंतर की एक सूची जिसे पहली फ़ाइल की दूसरी कॉपी पर लागू करके इसे दूसरी फ़ाइल के समान बनाया जा सकता है, निम्न कमांड का उपयोग किया जा सकता है:
diff -u file1.txt file2.txt > update.patch
-u विकल्प अंतर को यूनिफाइड फॉर्मेट में आउटपुट करता है जिसे patch कमांड द्वारा मूल फ़ाइल को परिवर्तनों के साथ अपडेट करने के लिए उपयोग किया जा सकता है।
यह उपयोगी है यदि आपका कोई मित्र या सहकर्मी आपके कुछ डेटा या प्रोग्रामिंग कोड का उपयोग कर रहा है, और आप उन्हें अपने द्वारा किए गए अपडेट्स भेजना चाहते हैं बिना पूरे डेटासेट या एप्लिकेशन को फिर से भेजे।
फ़ाइल के लिए पैच इंस्टॉल करना
जब आपका मित्र पैच प्राप्त करता है, तो वे निम्न patch कमांड का उपयोग करके इसे लागू कर सकते हैं:
patch original.txt < update.patch
फ़ाइल के लिए पैच को पूर्ववत करना
यदि आपने गलती की है, तो आप -R विकल्प के साथ रिवर्स में पैच चलाकर इसे पूर्ववत कर सकते हैं:
patch -R original.txt < update.patch
डायरेक्ट्री के लिए पैच बनाना
निम्न कमांड -r (रिकर्सिव), -u (यूनिफाइड फॉर्मेट), और -N (अनुपस्थित फ़ाइलों को खाली मानें) विकल्प चलाकर पूरी डायरेक्ट्री के लिए पैच बनाएगा।
diff -ruN originalDir updatedDir > update.patch
डायरेक्ट्री के लिए पैच इंस्टॉल करना
पैच को -p0 विकल्प का उपयोग करके डायरेक्ट्री पर लागू किया जा सकता है, जो पैच को उसी डायरेक्ट्री संरचना पर लागू करेगा जिसमें इसे बनाया गया था:
patch -p0 < update.patch
डायरेक्ट्री के लिए पैच को पूर्ववत करना
अंत में, डायरेक्ट्री की पैचिंग को पूर्ववत/रिवर्स करना:
patch -R -p0 originalFile < patchFile