दो निर्देशिकाओं में फ़ाइल नाम कैसे अंतर करें (मध्यवर्ती फ़ाइलों को लिखे बिना)?


31

मैं की तर्ज पर कुछ करने की कोशिश कर रहा हूं:

diff `ls -1a ./dir1` `ls -1a ./dir2`

लेकिन यह स्पष्ट कारणों के लिए काम नहीं करता है। क्या इसे प्राप्त करने का एक बेहतर तरीका है (1 पंक्ति में), इससे?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

धन्यवाद

जवाबों:


47

तुम पास थे। बैश में आप प्रक्रिया प्रतिस्थापन चाहते हैं , कमांड प्रतिस्थापन नहीं:

diff <(ls -1a ./dir1) <(ls -1a ./dir2)

प्रक्रिया प्रतिस्थापन हालांकि आवश्यक नहीं है। नीचे उत्तर ( superuser.com/a/228773/566289 ) बिंदु पर है!
जन डी

सिवाय इसके कि उत्तर सामग्री अलग है, फ़ाइल नाम नहीं!
खो दिया

10
diff -rq dir1 dir2

-r विकल्प का उपयोग करते हुए, पूरे डायरेक्टरी ट्री को चलाएं, प्रत्येक पेड़ में तुलनीय बिंदुओं पर होने वाली उपनिर्देशिकाओं और फ़ाइलों के बीच अंतर की जाँच करें। ट्रिक लाइन-दर-लाइन तुलनाओं को दबाने के लिए -q विकल्प का उपयोग करना है


3
@festo: आप इस प्रश्न की कविता को याद कर रहे हैं, मैं वास्तव में फ़ाइलों की सामग्री को अलग नहीं करना चाहता, मैं lsकमांड के आउटपुट को अलग करना चाहता हूं
bguiz

+1, वास्तव में, मुझे एक कैविएट के साथ एक ही आउटपुट मिला, diff -rq ने एक लिंक की गई फ़ाइल को 'ऐसी कोई फ़ाइल या निर्देशिका' के रूप में रिपोर्ट नहीं किया। तो, सही के लिए एक प्लस, और स्पष्ट रूप से सरल उपयोग। (भले ही आईवीए का जवाब प्रक्रिया प्रतिस्थापन के लिए एक बेहतर 'सीखने का अवसर' है (> _ <)
xtian

1
यह फ़ाइल नामों को अलग करने की तुलना में बहुत धीमा है: प्रत्येक फ़ाइल की संपूर्णता को पढ़ना और तुलना करना है।
ज़ाज़

@ जोश, क्योंकि यह पुनरावृत्ति करता है ....
ब्रायन

1
@ ब्रायम: भले ही आप फ़ाइल नामों ( उदाहरण के लिए, विकल्प के rsyncसाथ ) का पुनरावर्ती रूप से अंतर करते हैं --dry-run, फिर भी यह तुलना में बहुत तेज़ होगा diff -r
ज़ाज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.