আমি কি কেবল পরিবর্তিত ফাইলের একটি তালিকা তৈরি করতে rsync ব্যবহার করতে পারি?


26

আমি কয়েকটি সার্ভার এবং একটি এনএএস এর মধ্যে ফাইলগুলিকে সিঙ্কে রাখতে ব্যাশ স্ক্রিপ্টে আরএসসিএনসি ব্যবহার করছি। আমি যে সমস্যার মধ্যে পড়েছি তা হ'ল RSSync চলাকালীন যে ফাইলগুলি পরিবর্তিত হয়েছে তার একটি তালিকা তৈরি করার চেষ্টা করা হচ্ছে।

ধারণাটি হ'ল আমি আরএসসিএনসি চালানোর সময় আমি যে ফাইলগুলিকে একটি টেক্সট ফাইলে পরিবর্তিত করে আউটপুট করতে পারি - মেমরির একটি অ্যারের আরও প্রত্যাশী - তারপরে স্ক্রিপ্ট উপস্থিত হওয়ার আগে আমি কেবল পরিবর্তিত ফাইলগুলিতে একটি ছাঁটাই চালাতে পারি ।

কেউ কি এই জাতীয় কাজ সম্পাদনের জন্য কোনও উপায় খুঁজে পেয়েছেন?

# specify the source directory
source_directory=/Users/jason/Desktop/source

# specify the destination directory
# DO NOT ADD THE SAME DIRECTORY NAME AS RSYNC WILL CREATE IT FOR YOU
destination_directory=/Users/jason/Desktop/destination

# run the rsync command
rsync -avz $source_directory $destination_directory

# grab the changed items and save to an array or temp file?

# loop through and chown each changed file
for changed_item in "${changed_items[@]}"
do
        # chown the file owner and notify the user
        chown -R user:usergroup; echo '!! changed the user and group for:' $changed_item
done

→ দেখতে আমার আনোয়ার এখানে । এছাড়াও -iদফা অনুযায়ী সাজানো জন্য, কিন্তু আরো কয়েকটি ওঠা পড়ার ...
ফ্রাঙ্ক Nocke

উত্তর:


42

পার্সেবল আউটপুট তৈরি করার জন্য আপনি rsync এর --itemize-changes( -i) বিকল্পটি ব্যবহার করতে পারেন :

~ $ rsync src/ dest/ -ai
.d..t.... ./
>f+++++++ newfile
>f..t.... oldfile

~ $ echo 'new stuff' > src/newfile

~ $ !rsync
rsync src/ dest/ -ai
>f.st.... newfile

>প্রথম অবস্থানে চরিত্র নির্দেশ করে একটি ফাইল আপডেট করা হয়েছে, অক্ষর বাকি কেন, উদাহরণস্বরূপ এখানে ইঙ্গিত sএবং tনির্দেশ করে যে ফাইল সাইজ এবং টাইমস্ট্যাম্প পরিবর্তন করেছেন।

ফাইল তালিকা পেতে একটি দ্রুত এবং নোংরা উপায় হতে পারে:

rsync -ai src/ dest/ | egrep '^>'

স্পষ্টতই আরও উন্নত পার্সিং ক্লিনার আউটপুট উত্পাদন করতে পারে :-)

আমি কখন এই প্রচুর লিঙ্কটি পেয়েছি যখন এটি কখন কার্যকর --itemize-changesহয়েছিল তা আবিষ্কার করার চেষ্টা করার সময় :

http://andreafrancia.it/2010/03/ বোঝাবুঝি - আউটপুট-of-rsync-itemize-changes.html (সংরক্ষণাগার লিঙ্ক)


2
উল্লিখিত হিসাবে একটি ক্লিনার আউটপুট জন্য, rsync -zaic src/ dest/ | grep '^?c' | cut -d' ' -f2 --dry-runশুধুমাত্র পরিবর্তিত ফাইল ( বিভিন্ন চেকসাম ) তালিকা তৈরি করবে , অবশ্যই একটি রক্ষক, THX :) FYI বিকল্পটি --dry-runব্যবহার না করে কমান্ডের পরে দেওয়া nআমার পক্ষে একটি সেরা অনুশীলন
মিডিয়াভিস

মূলত rsync -zavc src/ dest/ --dry-runভার্বোস ছাড়াই একই
মিডিয়াভিস

14

চেকসাম পতাকা এবং পতাকাটির -nসাথে মিলিত পতাকা ব্যবহার করুন :-c-i

# rsync -naic test/ test-clone/
>fcst...... a.txt
>fcst...... abcde.txt
>fcst...... b.txt

এই উদাহরণে, কেবলমাত্র একটি ফাইলই ফাইলের সামগ্রীর উপর ভিত্তি করে পরিবর্তিত হয়েছে। তবে -nপতাকাটির কারণে কোনও ফাইল সিঙ্কিং করা হয় না

বোনাস

যদি আপনি পরিবর্তিত ফাইলগুলিতে ছাঁটাই চালাতে চান, তাদের পার্স আউট sedবা অনুরূপ এবং xargs দিয়ে প্রক্রিয়া করুন, উদাহরণস্বরূপ:

rsync -naic test/ test-clone/ | sed 's/............//' | xargs -I+ sudo chown root "test-clone/+"


-n --dry-run, -c --checksum,-i --itemize-changes
ThorSummoner

আমি অনুসরণ করছি না উদাহরণে থাকা ফাইলগুলির মধ্যে তিনটিই '> fcst' চিহ্নিত হয়েছে যার অর্থ আমি বুঝতে পারি 'দূরবর্তী থেকে প্রাপ্ত হওয়া', চেকসামের পার্থক্য রয়েছে, আকার পৃথক হয়, সময় আলাদা হয়। আউটপুটে কী বোঝায় যে "শুধুমাত্র একটি ফাইল বদলেছে" ??
বোবপল

1

এই প্রশ্নটি খানিকটা পুরানো, তবে আমি যুক্ত করা ভাল বলে মনে করি:

-i এর একটি শর্টকাট --out-format=%i%n%L

আর %nমানে ফাইলের নাম, (অধ্যায় log formatএর man rsyncd.conf)

PS rsync সংস্করণ 3.1.0


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