আমি কীভাবে এন-ওয়ে পার্থক্য করব?


14

আমি একাধিক কমান্ডের আউটপুট কীভাবে পৃথক করব? vimdiffচারটি ফাইল পর্যন্ত সমর্থন করতে পারে, তবে diffনিজেই ঠিক দুটি ফাইল সমর্থন করে বলে মনে হচ্ছে।

এটির কিছু বৈকল্পিকের সাহায্যে কি সরাসরি সম্ভব diff, বা আমার কি সমস্ত কমান্ডের আউটপুট অস্থায়ী ফাইলগুলিতে সংরক্ষণ করতে হবে, একটি বাছাই করতে হবে এবং এর সাথে বাকীটি আলাদা করতে হবে?


প্রসঙ্গ:

আমাকে একাধিক সার্ভারে একটি নির্দিষ্ট কমান্ডের আউটপুট পরীক্ষা করতে হবে এবং তারা সকলে একমত কিনা তা দেখতে হবে। এই মুহুর্তে, কেবল কোনও মতপার্থক্য পাওয়া যায় কিনা তা জানাচ্ছি, তবে সম্ভব হলে আমি বলতে সক্ষম হতে চাই: এক্স% সার্ভার একে অপরের সাথে একমত, ওয়াই% একে অপরের সাথে একমত; বা সেই সার্ভার জেডটি বিজোড়।

আমার একটি চার-মুখী মাল্টি-মাস্টার এলডিএপ সেটআপ রয়েছে এবং আমি যাচাই করতে চাই যে 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

এবং স্ক্রিপ্ট এর ত্রুটি কোড চেক। এর জন্য আরও ভাল সরঞ্জাম আছে?

উবুন্টু 14.04 এ ব্যবহার করা যেতে পারে এমন কোনও সরঞ্জাম welcome

উত্তর:


11

এটি করার সরঞ্জামটি হ'ল ডিফিউজ । এটি সাধারণত রেপো থেকে পাওয়া যায় (কমপক্ষে ডেবিয়ান এবং আর্চে, যেখানে আমি পরীক্ষা করেছিলাম)। এটি যেমনটি আপনি প্রত্যাশা করতেন তেমন কাজ করে:

  diffuse file1 file2 file3 file4

ইত্যাদি।


এটি স্ক্রিপ্টিং জন্য ব্যবহার করা যেতে পারে?
মুরু

আমি পাইথন দ্বারা GTK ত্রুটি একটি গুচ্ছ পেতে, এবং র manpage উবুন্টু 14.04 তে এটি একটি গ্রাফিকাল হাতিয়ার বলে, যেমন ডেবিয়ান করে হুইজি এর র manpage: manpages.debian.org/cgi-bin/...
muru

এটি দেখতে খুব ভাল একটি ডিফ সরঞ্জাম হিসাবে মনে হচ্ছে, সম্ভবত এটি নিজেই এটি ব্যবহার শুরু করবে। টিপটির জন্য ধন্যবাদ :)
গ্রায়েম

7

fdupesটুল এখানে আপনি কিছু ব্যবহার করা হতে পারে (সংগ্রহস্থলগুলিতে থাকবে)। তুলনা করার জন্য আপনার কাছে যদি প্রচুর পরিমাণে ফাইল থাকে তবে আপনি কোনটি ইতিমধ্যে অভিন্ন তা চিহ্নিত করে আপনাকে যে কাজটি করতে হবে তা হ্রাস করতে এটি ব্যবহার করতে পারেন। নীচে উল্লিখিত হিসাবে, এটি কেবল ডিরেক্টরি যুক্তিগুলির সাথে কাজ করে। আপনার যদি একটি ডিরেক্টরিতে পৃথক সমস্ত ফাইল থাকে তবে আপনি কিছু করতে পারেন:

fdupes .

একই ফাইলগুলি সনাক্ত করতে identify বা:

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.