मैं एन-वे कैसे कर सकता हूं?


14

मैं कई कमांड के आउटपुट को कैसे अलग करूं? vimdiffचार फ़ाइलों का समर्थन कर सकता है, लेकिन diffखुद को बिल्कुल दो फ़ाइलों का समर्थन करता है।

क्या यह सीधे तौर पर कुछ प्रकार के साथ संभव है diff, या क्या मुझे सभी कमांड के आउटपुट को अस्थायी फ़ाइलों में सहेजना है, एक को चुनना है और शेष को इसके साथ अलग करना है?


प्रसंग:

मुझे कई सर्वरों पर एक निश्चित कमांड के आउटपुट की जांच करनी होगी और देखना होगा कि क्या वे सभी सहमत हैं। इस समय के लिए, यदि कोई अंतर पाया जाता है तो केवल रिपोर्टिंग करना अच्छा लगता है, लेकिन यदि संभव हो तो, मैं कहना चाहूंगा: X% सर्वर एक दूसरे से सहमत हैं, एक दूसरे के साथ Y%; या वह सर्वर Z विषम वाला है।

मेरे पास एक चार-तरफा मल्टी-मास्टर LDAP सेटअप है, और मैं यह सत्यापित करना चाहता हूं कि ContextCSNचारों के लिए मान एक-दूसरे के साथ सहमत हैं।

तो अब मैं करता हूँ:

#! /bin/bash

for i in {1..4}.ldap 
do 
    ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn; 
done
set -e 
for i in {2..4}
do
    diff -q 1.csn $i.csn
done

और स्क्रिप्ट का एरर कोड चेक करें। क्या इसके लिए बेहतर उपकरण हैं?

कोई भी उपकरण जिसका उपयोग Ubuntu 14.04 स्वागत पर किया जा सकता है।

जवाबों:


11

ऐसा करने का उपकरण डिफ्यूज है । यह आम तौर पर रिपोस (कम से कम डेबियन और आर्क, जहां मैंने जाँच की) से उपलब्ध है। यह काम करता है के रूप में आप यह उम्मीद करेंगे:

  diffuse file1 file2 file3 file4

और इसी तरह।


क्या इसका इस्तेमाल स्क्रिप्टिंग के लिए किया जा सकता है?
मूरू

मुझे पायथन जीटीके त्रुटियों का एक गुच्छा मिलता है, और उबंटू 14.04 पर मैनपेज कहता है कि यह एक ग्राफिकल टूल है, जैसा कि डेबियन व्हीज़ीज़ मैनपेज: manpages.debian.org/cgi-bin/…
मूरू

यह एक बहुत अच्छा उपकरण की तरह दिखता है, संभवतः इसका उपयोग स्वयं करना शुरू कर देगा। टिप के लिए धन्यवाद :)
ग्रीम

7

यहां fdupesउपकरण आपके कुछ काम का हो सकता है (रिपॉजिटरी में होना चाहिए)। यदि आपके पास तुलना करने के लिए बड़ी संख्या में फाइलें हैं, तो आप इसका उपयोग उस काम को कम करने के लिए कर सकते हैं जो आपको पहचान कर करना है कि कौन से पहले से ही समान हैं। जैसा कि नीचे उल्लेख किया गया है, यह केवल निर्देशिका तर्कों के साथ काम करता है। यदि आपके पास एक निर्देशिका में अलग करने के लिए सभी फाइलें हैं, तो आप कुछ ऐसा कर सकते हैं:

fdupes .

फ़ाइलों की पहचान करने के लिए जो समान हैं। या:

comm -13 <(fdupes . |sort -u) <(find . -maxdepth 1 | sort)

फ़ाइलों की पहचान करने के लिए जो अद्वितीय हैं।

diff3कमांड भी उपयोगी हो सकता है।


fdupesतर्क के रूप में एक निर्देशिका की आवश्यकता प्रतीत होती है (आसानी से काम किया जाता है), लेकिन हां, फाइलों की एक गिनती fdupesबहुत उपयोगी है।
मूरू

@ मरमू, क्षमा करें, वह चूक गया। अपडेट किया गया।
ग्रीम

5

यदि आप केवल यह देखना चाहते हैं कि क्या फ़ाइलें सहमत हैं, तो आपको वास्तव में अंतर की आवश्यकता नहीं है। बस का उपयोग करें sha1sumया ऐसा कुछ।

उदाहरण के लिए:

#!/bin/sh
command="foo;bar|baz"
for server in server1 server2 server3 server4 server5 server6: do
    echo $server $(ssh $server "$command" |sha1sum)
done | sort -k2 

यह आपको सर्वर से अलग-अलग सूची, sha1sum जोड़े देगा। समान Sha1sum वाले सर्वर का आउटपुट समान होता है:

server1 55ca6286e3e4f4fba5d0448333fa99fc5a404a73 *-
server3 55ca6286e3e4f4fba5d0448333fa99fc5a404a73 *-
server6 55ca6286e3e4f4fba5d0448333fa99fc5a404a73 *-
server2 d961c3de6d6c99429806ae3d6d03f316a1168ac6 *-
server4 d961c3de6d6c99429806ae3d6d03f316a1168ac6 *-
server5 dcdc24e139db869eb059c9355c89c382de15b987 *-

उदाहरण के लिए, मेल सर्वरों की सूची प्राप्त करने के लिए आप आगे की प्रक्रिया कर सकते हैं:

#!/bin/sh
command="foo;bar|baz"
for server in server1 server2 server3 server4 server5: do
    echo $server $(ssh $server "$command" |sha1sum)
done | sort -k2 | while read srv sum; do
    if [ "$prevsum" == "$sum" ]; then 
        echo -n " "
    else
        echo
    fi
    echo -n $srv
    prevsum=$sum
done

जो आउटपुट देता है जैसे:

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