संस्करण 3.3 या उसके बाद के लिए diff, आपको --no-dereferenceविकल्प का उपयोग करना चाहिए , जैसा कि पीट हरलान के उत्तर में वर्णित है ।
दुर्भाग्य से, पुराने संस्करण diff सहानुभूति की अनदेखी का समर्थन नहीं करते हैं :
कुछ फाइलें न तो निर्देशिकाएं हैं और न ही नियमित फाइलें: वे असामान्य फाइलें हैं जैसे प्रतीकात्मक लिंक, डिवाइस विशेष फाइलें, नाम पाइप और सॉकेट। वर्तमान में, diffनियमित फ़ाइलों की तरह प्रतीकात्मक लिंक का व्यवहार करता है; यदि वे शीर्ष स्तर पर निर्दिष्ट हैं, तो यह नियमित फ़ाइलों जैसी अन्य विशेष फ़ाइलों का व्यवहार करता है, लेकिन निर्देशिकाओं की तुलना करते समय उनकी उपस्थिति की रिपोर्ट करता है। इसका मतलब है कि patchऐसी फ़ाइलों में परिवर्तन का प्रतिनिधित्व नहीं कर सकता है। उदाहरण के लिए, यदि आप बदलते हैं जो एक प्रतीकात्मक लिंक को इंगित करता है, diffतो प्रतीकात्मक लिंक में परिवर्तन के बजाय, दो फ़ाइलों के बीच अंतर को आउटपुट करता है।
diffविशेष रूप से विशेष फ़ाइलों के परिवर्तनों को वैकल्पिक रूप से रिपोर्ट करना चाहिए, और patchइन एक्सटेंशनों को समझने के लिए बढ़ाया जाना चाहिए।
यदि आप सभी चाहते हैं कि आप rsync को सत्यापित करें (और संभवतः जो याद आ रही है उसे ठीक करें), तो आप rsync कमांड को दूसरी बार चला सकते हैं। यदि आप ऐसा नहीं करना चाहते हैं, तो निर्देशिका का चेक-योग पर्याप्त हो सकता है।
यदि आप वास्तव में इसके साथ करना चाहते हैं diff, तो आप findसिमिलिंक को छोड़ने के लिए उपयोग कर सकते हैं , और प्रत्येक फ़ाइल पर अलग-अलग रन कर सकते हैं । अपने निर्देशिका दर्रा एक और ख तर्कों के रूप में:
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
या एक-लाइनर के रूप में:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
यह फ़ाइलों है कि सामग्री में भिन्न होते हैं, या फ़ाइलों जिसमें हैं की पहचान करेगा एक लेकिन में नहीं ख ।
ध्यान दें कि:
- चूँकि हम पूरी तरह से सिम्बलिंक को छोड़ रहे हैं, इसलिए यह ध्यान नहीं देगा कि सिमिलिंक नाम b में मौजूद नहीं हैं । यदि आपको इसकी आवश्यकता है, तो आपको सभी सिम्बलिंक की पहचान करने के लिए दूसरी खोज पास की आवश्यकता होगी और फिर स्पष्ट रूप से बी में उनके अस्तित्व की जांच करनी होगी ।
- बी में अतिरिक्त फाइलों की पहचान नहीं की जाएगी, क्योंकि सूची ए की सामग्री से निर्मित है । यह संभवतः आपके
rsyncपरिदृश्य के लिए कोई समस्या नहीं है।