প্রকৃতপক্ষে ফাইলগুলি পরিবর্তন করার আগে আরএসএনসি নিশ্চিতকরণের জন্য অপেক্ষা করুন


11

আমি একটি স্থানীয় এবং একটি দূরবর্তী ফোল্ডারের মধ্যে একটি সমন্বয় তৈরি করছি। এটি ঘটেছিল যে আমি বোকা কমান্ড দ্বারা একটি ফাইল হারিয়েছি।

প্রকৃত ফাইল ট্রান্সফার করার আগে আমি একসাথে এবং আপনি যেভাবে নিশ্চিত হয়েছিলেন ("যান?") অভ্যস্ত।

আরএসসিএন-এর সাথে এমন কোনও বিকল্প নেই? (সার্ভারে কোনও মিল নেই)

ধন্যবাদ!

উত্তর:


3

অফিসিয়াল "- কনফার্ম" বিকল্পের পরিবর্তে, আরএসআইএনসি'র নিজস্ব "ব্যাচ মোড" দুটি পথের মধ্যে পার্থক্য দ্বিগুণ গণনা করে বাইপাসে নেওয়া যেতে পারে। ব্যাচ মোডটি আয়নাতে পরিবর্তনগুলি বিতরণ করার উদ্দেশ্যে করা হয়েছিল (একবার গণনা করুন, অনেকগুলি অভিন্ন গাছ আপডেট করুন)। দুটি ফাইল তৈরি করা হয়েছে: আপডেটগুলি সহ একটি ব্যাচ ফাইল এবং আপডেট চালনার জন্য একটি সহজ সুবিধাযুক্ত স্ক্রিপ্ট ( বিশদ সহ আরএসইএনসি ম্যান পৃষ্ঠাটির শেষের দিকে একটি বিভাগ রয়েছে )।

প্রক্রিয়া বিমূর্ত করার জন্য এখানে ব্যাশের মোড়ক দেওয়া:

#!/bin/bash

cleanup ()
{
    rm ${BFILE} ${BFILE}.sh &>/dev/null
}

# generate tmpfile
BFILE=$( mktemp )

# rsync command
if ! rsync --only-write-batch="${BFILE}" --verbose "$@"; then
    cleanup
    exit 1
fi

# confirmation
read -p "Continue (y/N)? " confirm
if [ "$confirm" != "y" ]; then
    echo "Aborting"
    cleanup
    exit 1
fi

# carve up arguments
dest="${@: -1}"         # last argument
host="${dest%%:*}"      # host:path
path="${dest#*:}"
opts="${@:1:$(($#-2))}" # everything but the last two args
if [ "$host" = "${path}" ]; then
    # local
    sh "${BFILE}.sh"
else
    # remote
    ssh "$host" rsync --read-batch=- "${opts}" "${path}" <"${BFILE}"
fi

cleanup

নোট করুন যেহেতু এই স্ক্রিপ্টটি লিখিত $TMP_DIR, তাই আপনি যদি সত্যিই বড় ডেটা (উদাহরণস্বরূপ আপনার / tmp এর চেয়ে বড়) সরিয়ে নিয়ে থাকেন তবে আপনি স্থানের সীমাবদ্ধতায় চলে যেতে পারেন।


1
এটি কি প্রতিটি ফাইলের জন্য একটি নিশ্চয়তার জন্য জিজ্ঞাসা করে?
উচ্চ অনিয়মিত

2
না, এটি পরিবর্তনগুলি গণনা করে, তাদের প্রদর্শন করে এবং তারপরে একটি প্রম্পট প্রদর্শন করে, "চালিয়ে যান (y / N)?" এটি ব্যবহার করার পরে কিছুক্ষণ হয়ে গেছে, কিন্তু আইআইআরসি, আরএসআইএনসি এখনও মনে করে আরডিফ পুনরায় গণনা করতে পারে।
স্টিভ

7

শুকনো রান সঞ্চালনের জন্য আপনি rsync সহ -n বিকল্পটি ব্যবহার করতে পারেন। আরএসসিএনসি আপনাকে জানাবে যে এটি আসলে না করেই কী অপারেশনগুলি সম্পাদন করে। আপনি যদি ফলাফলগুলি নিয়ে খুশি হন তবে -n বিকল্প ব্যতীত পুনরায় চালনা করুন।


7

আপনি - ব্যাকআপ বিকল্পটি ব্যবহার করে ওভাররাইটে ফাইলগুলি ব্যাকআপ করতে rsync তৈরি করতে পারেন,

 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         backup suffix (default ~ w/o --backup-dir)

আরএসআইএনসি চালানোর পরে আপনি ফাইলগুলির জন্য ব্যাকআপ-ডির স্ক্যান করতে পারেন এবং এটি পুনরুদ্ধার করার প্রয়োজন হলে একে একে জিজ্ঞাসা করতে পারেন।


5

দুঃখের বিষয়, লেখার সময় রাইকিঙ্কে কোনও বিল্ট ইন মেথড নেই।

মাইক ফিৎজপ্যাট্রিকের সমাধানটি ভাল কাজ করবে, তবে আপনার যদি খুব বড় ডিরেক্টরি ট্রি থাকে তবে আপনি এমন কিছু করতে চাইতে পারেন যা আরএসসিএনকে আবার সমস্ত ফাইলের মধ্যে দিয়ে যায় না again

সম্পাদনা করুন: এটিতে একটি বাগ রয়েছে যেখানে এটি কোনও গন্তব্য ফাইল মুছে ফেলবে না ... যত বেশি ততবার আমি এটি দেখি, এই সমাধানটি নষ্ট হয়ে গেছে ... আমি এটি ছেড়ে দিচ্ছি কারণ এটি আপনার ক্ষেত্রে কার্যকর হতে পারে এবং যদি কেউ চায় এটা ঠিক করতে. এছাড়াও, কাউকে https://bugzilla.samba.org/enter_bug.cgi?product=rsync এ একটি আনুষ্ঠানিক বৈশিষ্ট্য অনুরোধ জমা দিতে হবে

আমি এই স্ক্রিপ্ট লিখেছি:

#! /bin/bash

# Make a temp file for storing the output of rsync

tmpfile=$( mktemp )  &&

# Do all the hard work ( get the list of files we need to update ), 
#  but dont actually change the filesystem

rsync --dry-run --out-format='RSYNC_CONFIRM %i %n%L' "$@" | grep RSYNC_CONFIRM | awk '{ print $3 }' > $tmpfile &&


# Output to the user what we propose to do
rsync --dry-run --itemize-changes --files-from=$tmpfile "$@" &&

# Alternatively, we could just output $tmpfile... but whatever...

read -p "Continue? (y/n)?" &&

if [[ $REPLY = [yY] ]]
then
{
  rsync --files-from=$tmpfile "$@"
}
fi

rm $tmpfile
  • কল করা কোনও ফাইলে স্ক্রিপ্ট আটকানোর চেষ্টা করুন rsync-confirm.bash

  • তারপর chmod +x rsync-confirm.bash

  • তারপর ./rsync-confirm.bash -rvh /etc/ /tmp/etc/

এই স্ক্রিপ্টটি কিছুটা ছোট ছোট হতে পারে, আমি লক্ষ্য করেছি যে উত্স ডিরেক্টরিতে যদি আপনার পিছনে স্ল্যাশ না থাকে তবে এটি সত্যিই এটি পছন্দ করে না ...

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