लिस्टिंग निर्देशिका काम करना चाहिए; उदाहरण के लिए, यहाँ मैंने एक स्क्रिप्ट में क्या प्रयोग किया है (मान लें कि विष्णु भिन्न है),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... जो .svnऔर .gitdirs की सामग्री को नजरअंदाज करता है , लेकिन यह भी नाम *.zip/ *.gz/ आदि व्यक्तिगत फ़ाइलों ।
संपादित करें: प्रपत्र के पथों को फ़िल्टर करने के लिए, dir_a/file1लेकिन फिर भी diffएक ही बेसनेम वाली फाइलें, जैसे कि dir_b/file1या dir_a/b/file1, फिर फ़ाइलों की एक सूची diffतैयार करनी होगी (उदाहरण के लिए, उपयोग करना find), और इन रास्तों से प्राप्त की गई तुलना करने के लिए फाइल; जैसे, दिया
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
आप उदाहरण के लिए, */a/2.txtलेकिन अभी भी नाम की अन्य फ़ाइलों की तुलना करने के लिए तुलना करने के लिए फ़ाइलों की सूची उत्पन्न करते हैं 2.txt। सिवाय सभी फाइलों को " ONE/a/2.txtखोजे " (एक regexp का उपयोग यहाँ भी किया जा सकता है, जैसे .*/a/2.txt)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
जो प्रभाव में ONE/a/2.txt(और TWO/a/2.txt) को अनदेखा करता है , लेकिन फिर भी नामित अन्य फ़ाइलों की तुलना करता है 2.txt:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
संपादित करें: या, findपाठक के लिए एक व्यायाम के रूप में अतिरिक्त मज़ा (अतिरिक्त मज़ा छोड़ दिया), फ़ाइलों और निर्देशिकाओं को बाहर करने के लिए और फिर diffसब कुछ का चयन करें:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
उपरोक्त उदाहरण विशिष्ट फ़ाइल "{top} /a/2.txt", "b" नामक किसी भी निर्देशिका को बाहर करता है, और बाकी सब कुछ अलग होगा। (सरल " -name b" के बजाय आप " -regex '.*/b'" - नोट, नो ट्रेलिंग "/" का भी उपयोग कर सकते हैं ।)
diffका--excludeविकल्प बहुत ही