কিছুক্ষণ আগে, আমি যে rsync
স্ক্রিপ্টটি লিখছিলাম তার জন্য আউটপুটটি বোঝার দরকার হয়েছিল। এই স্ক্রিপ্টটি লেখার প্রক্রিয়া চলাকালীন আমি চারপাশে গুগল করেছিলাম এবং @ মিট উপরে যা লিখেছিল তা এসেছি । আমি বিট ফ্ল্যাগগুলিতে নিজের প্রাইমার তৈরি করতে এবং rsync
সমস্ত ক্রিয়াকলাপের জন্য কীভাবে বিট ফ্ল্যাগগুলি আউটপুট করতে হয় সে জন্য অন্যান্য উত্স থেকে ডকুমেন্টেশন হিসাবে ব্যবহার করেছি (এটি ডিফল্টরূপে এটি করে না)।
আমি এই তথ্যটি এখানে আশাবাদে পোস্ট করছি যে এটি অন্যকে যারা (আমার মতো) অনুসন্ধানের মাধ্যমে এই পৃষ্ঠায় হোঁচট খেয়েছে এবং এর আরও ভাল ব্যাখ্যা প্রয়োজন তাদের সহায়তা করে rsync
।
সমন্বয় সঙ্গে --itemize-changes
পতাকা এবং-vvv
পতাকা, rsync
আমাদের সব ফাইল সিস্টেম পরিবর্তন উৎস ডিরেক্টরির মধ্যে চিহ্নিত করা হয়েছে যখন গন্তব্যের ডিরেক্টরি তুলনায় বিস্তারিত আউটপুট দেয়। বিট পতাকা দ্বারা উত্পাদিত rsync
তারপর কি পরিবর্তন হয়েছে তা নির্ধারণ করার জন্য ডিকোড করা যায়। প্রতিটি বিটের অর্থ ডিকোড করতে, নিম্নলিখিত টেবিলটি ব্যবহার করুন।
rsync
এর আউটপুটে প্রতিটি বিট অবস্থান এবং মানের ব্যাখ্যা :
YXcstpoguax path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
|| changed value (for symlinks, devices, and special files)
|╰---------- the file type:
| f: for a file,
| d: for a directory,
| L: for a symlink,
| D: for a device,
| S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
<: file is being transferred to the remote host (sent)
>: file is being transferred to the local host (received)
c: local change/creation for the item, such as:
- the creation of a directory
- the changing of a symlink,
- etc.
h: the item is a hard link to another item (requires
--hard-links).
.: the item is not being updated (though it might have
attributes that are being modified)
*: means that the rest of the itemized-output area contains
a message (e.g. "deleting")
বিভিন্ন পরিস্থিতিতে কিছু পরিস্থিতিতে উদাহরণস্বরূপ আরএসসিএনসি থেকে:
>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/
ক্যাপচারিংয়ের rsync
আউটপুট (বিট ফ্ল্যাগগুলির উপর দৃষ্টি নিবদ্ধ করা):
আমার পরীক্ষা এ উভয় --itemize-changes
পতাকা এবং-vvv
পতাকা পেতে প্রয়োজন হয় rsync
আউটপুট জন্য একটি এন্ট্রি সব ফাইল সিস্টেম পরিবর্তন। ট্রিপল ভার্বোস ( -vvv
) পতাকা ছাড়া, আমি তালিকাভুক্ত ডিরেক্টরি, লিঙ্ক এবং ডিভাইস পরিবর্তনগুলি দেখছি না। এটি আপনার প্রত্যাশিত সমস্ত পর্যবেক্ষণ করে এবং লক্ষ্য করছে কিনা তা নিশ্চিত করার জন্য আপনার আরএসসিঙ্কের সংস্করণটি পরীক্ষা করা মূল্যবান।
এই কৌশলটির একটি সহজ ব্যবহার হ'ল --dry-run
কমান্ডটিতে পতাকা যুক্ত করা এবং রাইসাইক দ্বারা নির্ধারিত পরিবর্তনের তালিকাটি একটি ভেরিয়েবলে (কোনও পরিবর্তন না করে) সংগ্রহ করা যাতে আপনি নিজেই তালিকায় কিছু প্রক্রিয়াজাত করতে পারেন। নিম্নলিখিত মত কিছু আউটপুট একটি চলক মধ্যে ক্যাপচার করবে:
file_system_changes=$(rsync --archive --acls --xattrs \
--checksum --dry-run \
--itemize-changes -vvv \
"/some/source-path/" \
"/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')
উপরের উদাহরণে, (স্টডআউট) আউটপুট rsync
পুনর্নির্দেশ করা হয়েছে grep
(স্ট্ডিনের মাধ্যমে) যাতে আমরা বিট পতাকাযুক্ত কেবলমাত্র লাইনগুলি পৃথক করতে পারি।
গৃহীত আউটপুট প্রক্রিয়াজাতকরণ:
ভেরিয়েবলের বিষয়বস্তুগুলি পরে ব্যবহারের জন্য লগ করা যেতে পারে বা আগ্রহী আইটেমগুলির জন্য অবিলম্বে পুনরাবৃত্তি করা যেতে পারে। আমি আরও সঠিকরূপে গবেষণার সময় আমার লিখিত স্ক্রিপ্টটিতে এই সঠিক কৌশলটি ব্যবহার করি rsync
। নতুন ফাইল, নকল ফাইল (একই নাম, একই বিষয়বস্তু), ফাইল সংঘর্ষ (একই নাম, ভিন্ন) আলাদা করতে ক্যাপচার আউটপুট পোস্ট-প্রসেসিংয়ের উদাহরণগুলির জন্য আপনি স্ক্রিপ্টটিতে ( https://github.com/jmmitchell/movestough ) দেখতে পারেন বিষয়বস্তু), পাশাপাশি সাব-ডিরেক্টরি ডিরেক্টরিতে পরিবর্তনগুলি।