क्या कोई लिनक्स / यूनिक्स उपकरण हैं जो एक निर्देशिका में सभी फाइलों को दूसरे में मौजूद नहीं पाते हैं? मूल रूप से मैं ls के आउटपुट पर काम करने वाले अंतर की तलाश कर रहा हूं।
लघु और मधुर लिपियों की भी सराहना की जाती है।
क्या कोई लिनक्स / यूनिक्स उपकरण हैं जो एक निर्देशिका में सभी फाइलों को दूसरे में मौजूद नहीं पाते हैं? मूल रूप से मैं ls के आउटपुट पर काम करने वाले अंतर की तलाश कर रहा हूं।
लघु और मधुर लिपियों की भी सराहना की जाती है।
जवाबों:
diff यह पहले से ही करता है:
diff dir1 dir2
उदाहरण आउटपुट:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
दे घुमा के:
diff <(cd dir1; ls) <(cd dir2; ls)
नहीं फ़ाइलों की सामग्री - केवल फ़ाइल नाम की तुलना करें।
ls, findइसके बजाय उपयोग करें !
जैसे लोगों ने आपको यहां बताया है, आप विभिन्न उपयोग विविधताओं में डीआईएफएफ का उपयोग कर सकते हैं। या आप dirdiffइसके बजाय बस का उपयोग करते हैं, जो आप कोशिश कर रहे हैं के लिए है! :-)
लेकिन अगर आप कुछ निर्देशिकाओं को सिंक में रखना चाहते हैं तो आपको वास्तव में इस पर ध्यान देना चाहिए rsync।
सादर
यदि आप सभी उप निर्देशिकाओं के माध्यम से भी ऐसा करना चाहते हैं, तो एक अच्छा तरीका यह है:
diff --brief -r dir1/ dir2/
मैं संक्षिप्त का उपयोग करना पसंद करता हूं, लेकिन आप चाहें तो इसे छोड़ सकते हैं।
डेनिस विलियमसन एक था अच्छा जवाब है, लेकिन मैं इस रिकर्सिवली करने के लिए की जरूरत है। GNU फाइंडट्यूल्स 4.7.0 अपने आउटपुट को सॉर्ट नहीं करता है, इसलिए यहां मैंने जो प्रयोग किया है
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
इसे केवल एक ही तरीके से करने के लिए, और फ़ाइलों की सूची तैयार करने के लिए, मैंने इसका उपयोग किया:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
इसके लिए ठीक से काम करने के लिए, न तो $ dir1 और न ही $ dir2 को अनुगामी स्लैश शामिल करना चाहिए।
diff dir1 dir2 | grep "Only"