स्थानीय और दूरस्थ फ़ाइलों के बीच एक अंतर चलाएँ


39

मैं एक होस्ट के माध्यम से जुड़ा हुआ हूं sshऔर मैं तुलना करना चाहता हूं (चलो कहते हैं diff) एक दूसरे होस्ट पर अपने समकक्ष के खिलाफ एक निश्चित कॉन्फिग फ़ाइल ssh, जिसके माध्यम से भी पहुँचा जा सकता है , बिना मैन्युअल रूप से रिमोट फाइल डाउनलोड करने से पहले अंतर को चलाने से पहले।


आप दूरस्थ निर्देशिका का उपयोग करके माउंट कर सकते हैं SSHFS, और फिर इसे एक्सेस कर सकते हैं जैसे कि यह स्थानीय है।
बरमार

जवाबों:


57
ssh user@remote_host "cat remote_file.txt" | diff - local_file.txt

स्रोत


1
क्या पाइप केवल उन परिणामों को डाउनलोड नहीं करेगा cat, जो वास्तव में सिर्फ मूल फ़ाइल हैं?
स्टिज डे विट

1
पाइप रिमोट sshकमांड के परिणाम को आगे बढ़ाएगा, जिसे लोकलफाइल के साथ diffतुलना करने का इंतजार है stdin
fduff

1
शायद मैं 'रिमोट फाइल डाउनलोड करने की आवश्यकता के बिना' की गलत व्याख्या कर रहा हूं। मुझे लगता है कि ओपी का मतलब है 'रिमोट फाइल डाउनलोड किए बिना'। :) संपादित करें: आह, आप ओपी हैं। :)
स्टिज डे विट जू

@StijndeWitt, हाँ, मैं पहले रिमोट फ़ाइल को
स्कैन

18

प्रयत्न:

diff local_file <(ssh user@server 'cat remote_file')

या उपयोग कर रहा है vimdiff:

vimdiff local_file scp://server//path/to/remote_file

क्या diff local_file <(ssh user@server 'cat remote_file')केवल पासवर्ड रहित SSH के लिए काम करता है ? मैं इसके साथ एक पासवर्ड प्रॉम्प्ट प्राप्त करने में सक्षम नहीं लगता ...
sdbbs

1
@ एसडीबी: प्रक्रिया प्रतिस्थापन पृष्ठभूमि में चला गया, और मानक आउटपुट नाम पाइप (या अनाम पाइप नाम) को लिखा जाता है, इसलिए आपको पासवर्ड संकेत नहीं मिलता है। कोशिश करें cat <(ssh user@server 'cat remote_file')और cat < <(ssh user@server 'cat remote_file')मतभेद देखने के लिए।
कोउंगलम

9

शायद यह आपके सटीक मामले में सहायक नहीं है, लेकिन मैं अक्सर बस उपयोग करता हूं

sum -r

प्रत्येक मशीन पर, और मैन्युअल रूप से चेकसम की तुलना करें। फ़ाइलों की तुलना के लिए भी अनुमति देता है जब वे एक ssh कनेक्शन के माध्यम से उपलब्ध नहीं हैं। बेशक, यह सभी जवाब है "क्या वे समान हैं", लेकिन अक्सर यह मेरी जरूरतों के लिए पर्याप्त है। यह सत्यापित करना भी आसान बनाता है कि एकल फ़ाइल 3 या 4 या अधिक मशीनों पर समान है।


2
मैं कल्पना कर सकता हूं कि बड़ी फ़ाइलों, या धीमे कनेक्शनों के लिए, यह बहुत उपयोगी हो सकता है। यह पूरी फ़ाइल के डाउनलोड को तब बचाता है जब फाइलें वास्तव में अलग होती हैं। अपने आप से बेहतर बैश लाभांश शायद इस उत्तर को उपरोक्त उत्तरों के साथ जोड़ सकता है जिसमें रिमोट catसे केवल वास्तव में catकमांड को चलाया जा सकता है जब यह निर्धारित किया गया है कि फाइलें अलग हैं।
स्टिज डे विट

1
कमांडिंग का info coreutils 'sum invocation'कहना है, अंतर-अलिया: "संगतता के लिए 'योग' प्रदान किया गया है, 'cksum' कार्यक्रम (अगले भाग देखें) नए अनुप्रयोगों में बेहतर है।"
तेमू लीस्टी

1

यदि आप टर्मिनल सत्र में अधिक दृश्य दृष्टिकोण पसंद करते हैं। आधी रात के कमांडर के पास एक रिमोट फाइल सिस्टम विकल्प (एसएफटीपी लिंक ... मेनू में विकल्प) और दृश्य फ़ाइल तुलना विकल्प होता है। यह अधिकांश लिनक्स सिस्टम पर डिफ़ॉल्ट रूप से स्थापित नहीं है, लेकिन अधिकांश बेस रिपॉजिटरी में उपलब्ध है। कदम:

  1. mcतुलना करने के लिए फ़ाइल वाले फ़ोल्डर में मध्यरात्रि कमांडर (कमांड:) शुरू करें
  2. दूसरी तरफ (उदाहरण के लिए राइट मेनू) उसी फ़ोल्डर में दूसरे सर्वर पर एक sftp लिंक बनाएं ( sftp://<user>@<servername>/<path>)।
  3. insकुंजी का उपयोग करना / तुलना करने के लिए फ़ाइलों को हाइलाइट करें। ( tabबाएँ और दाएँ पैनल के बीच परिवर्तन)।
  4. में कमान मेनू, चयन की तुलना करें फ़ाइलें

नोट: मध्यरात्रि कमांडर मेनू आमतौर पर आपके टर्मिनल सत्र में माउस का उपयोग करके पहुँचा जा सकता है। यह काम नहीं करता F9है आप मेनू में भी हो जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.