rsync: ফাইলগুলি এড়িয়ে যান যার জন্য আমার অনুমতি নেই


16

আমি rsync -rlptDঅন্য ব্যবহারকারীর কাছ থেকে ডিরেক্টরি অনুলিপি করতে ব্যবহার করছি । কয়েকটি ফাইল রয়েছে (আমার কাছে এগুলি আগে জানার কোনও উপায় নেই) যা অনুলিপি করার অনুমতি আমার নেই। আরএসসিএনসি এগুলিকে উপেক্ষা করার কোনও উপায় আছে কি? সমস্যাটি হ'ল আরএসসিএনসি যদি শূন্য থেকে ফিরে আসে তবে আমার বাশ-এক্স স্ক্রিপ্টটি প্রস্থান করবে।


Rsync ভাল প্রস্থানিত মান নথিভুক্ত করেছে। আপনার পরিস্থিতি যদি এটি ব্যর্থতা না হওয়ার আহ্বান না করে তবে আপনি তাদের সকলকে ব্যর্থ হিসাবে বিবেচনা করবেন না।
জর্দানম

@ জোর্ডানম তবে কোনও ত্রুটি কোড নেই যা কেবলমাত্র এই ত্রুটি চিহ্নিত করার জন্য যথেষ্ট নির্দিষ্ট।
গিলস 'এ-ও দুষ্ট হওয়া বন্ধ করুন'

উত্তর:


7

Rsync এর জন্য বিকল্প নেই। আমি দুটি সমাধান দেখতে পাচ্ছি। একটি হ'ল rsync ত্রুটি বার্তাগুলি পার্স করা; এটি খুব মজবুত নয়। অন্যটি ফিল্টার করার জন্য অপঠনযোগ্য ফাইলগুলির একটি তালিকা তৈরি করা।

cd /source/directory
exclude_file=$(mktemp)
find . ! -readable -o -type d ! -executable |
  sed -e 's:^\./:/:' -e 's:[?*\\[]:\\1:g' >>"$exclude_file"
rsync -rlptD --exclude-from="$exclude_file" . /target/directory
rm "$exclude_file"

যদি আপনার findনা থাকে -readableএবং -executableউপযুক্ত -permনির্দেশিকা দ্বারা এগুলি প্রতিস্থাপন করুন ।

এটি ধরে নিয়েছে যে কোনও অপঠনযোগ্য ফাইল নেই যার নামে একটি নতুন লাইন রয়েছে। আপনার যদি এগুলি মোকাবেলা করার প্রয়োজন হয় তবে আপনাকে এই জাতীয় নাল-ডিলিমিট ফাইল তালিকা তৈরি -0করতে হবে এবং এতে বিকল্পটি পাস করতে হবে rsync:

find . \( ! -readable -o -type d ! -executable \) -print0 |
  perl -0000 -pe 's:\A\./:/:' -e 's:[?*\\[]:$1:g' >>"$exclude_file"

এটি সম্ভবত তাঁর সেরা বাজি। আশা করা যায়, তাকে কেবল একবার চালাতে হবে, কারণ stat()প্রতিটি ফাইল দু'বার করা (একবার আরএসসিএনসি মাধ্যমে এবং একবার অনুসন্ধানের মাধ্যমে) করা খুব খারাপ হবে।
জর্দান

@ গিলিস লুকায়িত ফাইল বাদে এটি কাজ করে বলে মনে হচ্ছে। আমি ধরে নিচ্ছি একই কৌশলটি কিছুটা ছোটখাটো টুইট করে কাজ করবে। আমি with এর সাথে পরিচিত নই! (স্ল্যাশ বিস্মৃতি) আপনি কি এটি ব্যাখ্যা করতে পারেন?
জেফচার্টার

1
@ জেফসি অপারেটরটিকে শেল প্রসারণের বিরুদ্ধে রক্ষা করতে \!উদ্ধৃতি দিয়েছে !। ব্যাকস্ল্যাশ আসলে এখানে প্রয়োজনীয় নয় যেহেতু কোনও শেল কোনও !স্থান অনুসরণ করার পরে প্রসারিত হয় না, তবে এটি ক্ষতি করে না। লুকানো ফাইল গুলোতে কি সমস্যা?
গিলস 'অশুভ হওয়া বন্ধ করুন'

3

এই নির্দিষ্ট পরিস্থিতির জন্য আমি একটি সাধারণ কাজ করেছি:

rsync --args || $(case "$?" in 0|23) exit 0 ;; *) exit $?; esac)

এই আয় 0ফিরে কোড 0 বা 23, এবং আয় অন্যান্য সব ক্ষেত্রে প্রস্থান কোড ছিল।

তবে এটি লক্ষণীয় গুরুত্বপূর্ণ যে এটি কেবল সমস্ত Partial transfer due to errorঅনুমতি ছাড়াই নয় , সমস্ত ত্রুটি উপেক্ষা করবে কারণ এটি কোড থেকে বেরিয়ে আসা সমস্ত কিছুকেই ধরবে 23। আরএসএনসি স্থিতি কোড সম্পর্কে আরও তথ্যের জন্য দয়া করে এই লিঙ্কটি দেখুন

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