आपको मूल रूप से दो फ़ाइलों की तुलना करने की आवश्यकता है, सशर्त रूप से अनुगामी बाइट की अनदेखी करना। ऐसा करने के लिए कोई 'भिन्न' विकल्प नहीं है - लेकिन कई तरीके हैं जिनसे यह किया जा सकता है (उदाहरण के लिए, हेक्स अंतर भी ध्यान में आता है।)
'भिन्न' का उपयोग करने के लिए, आपको मूल रूप से उन फ़ाइलों को संशोधित करना होगा जो एक फ़ाइल के अंत में नई रेखा को याद कर रहे हैं, और फिर तुलना करें। आप संशोधित फ़ाइलों के साथ एक अस्थायी निर्देशिका बना सकते हैं, या थोड़ी सी स्क्रिप्टिंग के साथ इसे मेमोरी में किया जा सकता है। (जैसा कि पसंद किया जाता है, वरीयता, फ़ाइल का आकार, फ़ाइलों की संख्या ...) पर निर्भर करता है
उदाहरण के लिए, निम्नलिखित एक फ़ाइल की सामग्री को संशोधित करेगा (एक sed -i
जगह में संशोधन करने के लिए उपयोग , यह सिर्फ प्रिंट करता है) यदि कोई लापता है (या पहले से ही एक नई पंक्ति है तो फ़ाइल को अपरिवर्तित छोड़ दें):
sed -e '$a\' file1.txt
और सिर्फ़ 'अलग' सिंटैक्स की समीक्षा करने के लिए (सही मायने में वापसी का मतलब है कि वे समान हैं, झूठे का मतलब अलग है):
$ diff a/file1.txt b/file1.txt \
&& echo '** are same' || echo '** are different'
2c2
< eof
---
> eof
\ No newline at end of file
** are different
सत्यापित करें कि केवल व्हाट्सएप अलग है:
$ diff --ignore-all-space a/file1.txt b/file1.txt \
&& echo '** are same' || echo '** are different'
** are same
बैश में, हम 'सेड' का उपयोग फाइल कंटेंट में फेरबदल करने के लिए कर सकते हैं क्योंकि यह 'डिफर्ड' (मूल फाइल जो बिना लाइसेंस के छोड़ दिया गया है):
$ diff <(sed -e '$a\' a/file1.txt) <(sed -e '$a\' b/file1.txt) \
&& echo '** are same' || echo '** are different'
** are same
अब आपको केवल इतना करना है कि diff -r
निर्देशिकाओं की पुनरावृत्ति की तुलना करें। यदि निर्देशिकाओं की तुलना a
और b
, तो सभी फ़ाइलों के लिए a
(जैसे, a/dir1/dir2/file.txt
) फ़ाइल में पथ प्राप्त करें b
(जैसे, b/dir1/dir2/file.txt
) और तुलना करें:
$ for f in $( find a -type f )
> do
> diff <(sed -e '$a\' $f) <(sed -e '$a\' b/${f#*/})
> done
थोड़ा और अधिक वर्बोज़ संस्करण:
$ for f in $( find a -type f )
> do
> f1=$f
> f2=b/${f#*/}
> echo "compare: $f1 $f2"
> diff <(sed -e '$a\' $f1) <(sed -e '$a\' $f2) \
> && echo '** are same' || echo '** are different'
> done && echo '** all are same' || echo '** all are different'
compare: a/file1.txt b/file1.txt
** are same
compare: a/file2.txt b/file2.txt
** are same
** all are same
sed -e '$a\'
वास्तव में क्या करता है? thx