উত্তর:
Rsync এর dry-run
বিকল্প রয়েছে:
-n, --dry-run show what would have been transferred
আপনারা যা চান এটি নিশ্চিত কিনা তা আমি নিশ্চিত নই।
আপনি যদি diff
দুটি গাছ জুড়ে ফাইলগুলি করতে চান তবে আপনি সম্ভবত ls এবং আউটপুট থেকে দুটি ফাইলে পাইপের জন্য দুটি দিক অনুসন্ধান এবং পাইপ দিয়ে অনুসন্ধান করতে পারেন। তারপরে আপনি diff
ফাইলগুলি তুলনা করতে ব্যবহার করতে পারেন ।
rsync -rvn localdir targetdir
-N এর অর্থ কেবল ক্রিয়া প্রদর্শন করা (কোনও ক্রিয়া সম্পাদন করা ছাড়াই)।
মনে রাখবেন আপনার 'ভি' দরকার বা এটি আপনাকে কিছু দেখায় না! (বাকি উত্তরগুলি এটি ভুলে যায় ...)
অন্যান্য উত্তর এবং /server//a/618740/114520 এ বিল্ডিং
--dry-run
(বা -n
) ব্যবহার করুন--itemize-changes
(বা -i
) ব্যবহার করুন--archive
(বা -a
) সমস্ত উপ-ডিরেক্টরি পেতে ব্যবহার করুনegrep
বিন্দু দ্বারা প্রারম্ভিক এন্ট্রি ফিল্টার আউট ব্যবহার (কোন পরিবর্তন নেই)যা আপনাকে দেয়: rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\."
আপনি যদি কেবল একটি উপায় চান তবে আপনি আদেশটি পরিবর্তন করতে পারেন:
rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|<)"
rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|>)"
এবং আপনার যদি কেবল ফাইলগুলির প্রয়োজন হয় তবে কেবল awk
যাদু যুক্ত করুন:rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\." | awk '{print $2}'
আমি এই জাতীয় কিছু জন্য যেতে হবে:
#! /bin/bash
set -eu ## Stop on errors and on undefined variables
## The local directory name
LOCAL_DIR=$1
## The remote directory in rsync sintax. Example: "machine:directory"
REMOTE_DIR=$2
shift
shift
# Now the first two args are gone and any other remaining arguments, if any,
# can be expanded with $* or $@
# Create temporary file in THIS directory (hopefully in the same disk as $1:
# we need to hard link, which can only made in the same partition)
tmpd="$(mktemp -d "$PWD/XXXXXXX.tmp" )"
# Upon exit, remove temporary directory, both on error and on success
trap 'rm -rf "$tmpd"' EXIT
# Make a *hard-linked* copy of our repository. It uses very little space
# and is very quick
cp -al "$LOCAL_DIR" "$tmpd"
# Copy the files. The final «"$@"» allows us to pass on arguments for rsync
# from the command line (after the two directories).
rsync -a "$REMOTE_DIR"/ "$tmpd/" --size-only "$@"
# Compare both trees
meld "$LOCAL_DIR" "$tmpd"
উদাহরণ স্বরূপ:
$ cd svn
$ rsyncmeld myproject othermachine:myproject -v --exclude '*.svn' --exclude build
ব্যাপার সত্য যে আপনি যদি চালানো হয় rsync -v ...
এবং এটি পর্দা থেকে একটি ফাইলের নাম আউটপুট, এই ফাইলটি হয় স্থানান্তরিত হচ্ছে (অথবা, স্থানান্তরিত করা হত আপনি একটি --dry রানের করছেন)। আর আর সিএনসি কেন এটি স্থানান্তর করতে চলেছে তা নির্ধারণের জন্য, আইটেমাইজ মোডটি ব্যবহার করুন: /server//a/618740/27813
অন্যরা যেমন উল্লেখ করেছে, ডিফল্টরূপে rsync কেবল ফাইলের আকার এবং টাইমস্ট্যাম্পের উপর ভিত্তি করে তুলনা করে, যা উভয়েরই সাথে অন্য একটি ফাইলের সাথে "ডেল্টা অনুলিপি" শুরু হয়। আপনি যদি সত্যিই কোন ফাইলগুলি দেখতে আলাদা করতে চান তবে "-c" চেকসাম মোডটি ব্যবহার করুন।
--dry-run
বিশদটি আপনার ব্যবহারের উপর নির্ভর করবে-v
এবং--progress options
- সুতরাং যদি আপনি কোনও আউটপুট না পান তবে এই বিকল্পগুলি প্রয়োজনীয় হিসাবে সেট করা আছে। আমি লক্ষ্য করেছি যে এটি ফাইলের নাম পরিবর্তন না হওয়া সত্ত্বেও ডিরেক্টরিগুলির নাম প্রেরণ করবে, তবে আপনি আউটপুটsed
বা অনুরূপ পাস করে এইগুলি ফিল্টার করতে পারবেন ।