RSSync বাশে কোনও পরিবর্তন করেছে কিনা আমি কীভাবে তা পরীক্ষা করতে পারি?


12

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা দূরবর্তী -> স্থানীয় দৃশ্যে ডেটা সিঙ্ক করতে rsync ব্যবহার করে। আরএসইএনসি কমান্ডটি চালুর সাথে সাথেই ত্রুটি কোডটি শূন্যের সমান কিনা তা পরীক্ষা করে দেখুন। যদি এর শূন্য হয় তবে আরও কমান্ড সম্পাদন করা হবে। এটি তবে এই সত্যটিকে বিবেচনা করে না যে rsync সফলভাবে চলতে পারে তবে বাস্তবে কোনও পরিবর্তন হয়নি। এ কারণে সমান শূন্য শর্তটি নির্বিশেষে চলবে যা কিছুটা নিরর্থক।

rsync -aEivm --delete /path/to/remote/ /path/to/local/

if [ $? -eq 0 ]; then
    # Success do some more work!
else
    # Something went wrong!
    exit 1;
fi

আরএসইএনসি কমান্ডের উপর ভিত্তি করে কোন পরিবর্তন হয়েছে কিনা তা যাচাই করার জন্য এটি প্রসারণের সেরা পন্থাটি কী হবে? আমি পড়েছি যে -i পতাকাটি স্টডআউটকে আউটপুট সরবরাহ করতে পারে তবে কীভাবে এটি শর্তযুক্ত ব্লকে রাখা যেতে পারে?


আপনি -vসেখানে প্রবেশ করেছেন, সুতরাং এটি আপনাকে স্টডআউট করার জন্য প্রয়োজনীয় তথ্য সরবরাহ করছে ... উদাহরণস্বরূপ, ফাইলগুলির একটি তালিকা যা আসলে পাঠানো হয়েছিল। যদি কিছু পরিবর্তন না হয় তবে তা ঠিক ./
স্বর্ণলোক 13

আহ! আমি যদি এর পরিবর্তে -v এবং -i ব্যবহার করি এবং তারপরে rsync কমান্ডটিতে একটি খালি-খালি স্ট্রিং চেক ব্যবহার করি?
জেমস হোয়াইট

দেখে মনে হচ্ছে সমাধান নিজেই খুঁজে পেয়েছেন? :-)
বজর্ন মঞ্চ

2
আপনি ব্যবহার করতে পারেন a=$("rsync command")। এই চালানো হবে rsyncকমান্ড এবং দোকান stdoutমধ্যে a। তারপরে আপনি পরীক্ষাগুলি চালাতে পারবেনa
নাইটিশ্চ

1
আপনি এর | grep /মতো একটি বা কিছু যুক্ত করতে পারেন, তারপরে গ্রেপের সাথে প্রস্থান স্থিতিটি পরীক্ষা করে দেখুন $?, যদি আউটপুট না থাকে তবে এটি 1 হওয়া উচিত।
বজর্ন মঞ্চ 21

উত্তর:


9

আমার মূল প্রশ্নের মন্তব্যের উপর ভিত্তি করে, -i পতাকা দিয়ে স্টডআউট করতে আরএসসিএন আউটপুট তৈরি করুন এবং ত্রুটি কোড চেকের মধ্যে আসলে কিছু পরিবর্তন হয়েছে কিনা তা দেখার জন্য একটি স্ট্রিং চেক শর্ত ব্যবহার করুন। ভেরিয়েবলের মধ্যে rsync কমান্ড মোড়ানো চেক সম্পন্ন করার অনুমতি দেয়।

RSYNC_COMMAND=$(rsync -aEim --delete /path/to/remote/ /path/to/local/)

    if [ $? -eq 0 ]; then
        # Success do some more work!

        if [ -n "${RSYNC_COMMAND}" ]; then
            # Stuff to run, because rsync has changes
        else
            # No changes were made by rsync
        fi
    else
        # Something went wrong!
        exit 1
    fi

সম্ভাব্য খারাপ দিক, আপনাকে ভার্বোজ আউটপুট হারাতে হবে, তবে আপনি সর্বদা এটির পরিবর্তে কোনও ফাইলে লগ করতে পারেন।


1

আমি আরও কঠোর সমাধান চেয়েছিলাম। আমি Number of created files:(বার্তাটি অন্য ভাষায় হতে পারে) জন্য গ্রেপ করতে বা সমস্ত লাইন -vআউটপুটে দুটি অপসারণ করতে চাই না ( rsyncপরবর্তী সংস্করণে কী সংক্ষিপ্তসারটি প্রিন্ট করবে কে জানে ?)

আমি দেখতে পেয়েছি যে আপনি একটি rsyncলগের ফর্ম্যাট সেট করতে পারেন , তবে এর স্টাডআউটের বিন্যাস নয় (দেখুন man rsyncd.conf)।

উদাহরণস্বরূপ, একটি "ফাইল পরিবর্তিত!" যুক্ত করুন প্রকৃত পরিবর্তিত ফাইল সহ প্রতিটি লাইনে এবং তারপরে grep:

rsync -a \
    --log-file=/tmp/rsync.log \
    --log-file-format="File changed! %f %i" \
    source-dir target-dir

if fgrep "File changed!" /tmp/rsync.log > /dev/null; then
    echo "rsync did something!"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.