ভেরিয়েবলের তালিকা সহ Rsync


0

আমি একটি বাশ স্ক্রিপ্ট লেখার চেষ্টা করছি যা কেবলমাত্র ফোল্ডারগুলির একটি নির্দিষ্ট উপসেটকেই সিএসএনসি করবে। আমি আরও স্লিট বের করার চেষ্টা করছি যাতে আমি কেবল FOLDER1='name of folder in home directory'এবং তারপরে একটি ভেরিয়েবল যুক্ত করতে পারি

rsync -arvz --delete /home/emka/$FOLDER1/ /home/emka/Desktop/Mount/$FOLDER1

বর্তমানে আমি FOLDER1মাধ্যমে FOLDER13, কিন্তু আমি উপরের লাইনটি তেরো বার আছে চাই না।

কেউ কীভাবে আমাকে এই কাজটি করার জন্য ধাক্কা দিতে পারেন?

bash  rsync 

না আপনার প্রশ্নের একটি সাধারণ উত্তর: কিন্তু এই বিশেষ উদাহরণে আপনার কাছে শুধু ওয়াইল্ডকার্ড ব্যবহার করতে পারে: rsync -arvz --delete /home/emka/{folder1,folder2,folder[3456]} /home/emka/Desktop/Mount/। নেস্টেড ওয়াইল্ডকার্ডগুলি নোট করুন। এবং লক্ষ্য করুন যে কীভাবে পিছনের স্ল্যাশগুলি /পরিবর্তন করতে হয়েছিল।
সিএফআই

উত্তর:


3

বাশ আপনাকে অ্যারে এবং লুপগুলি ব্যবহার করতে দেয় ।

প্রতিটি পাথকে অ্যারের উপাদান হিসাবে সংজ্ঞা দিন, তারপরে অ্যারের মধ্য দিয়ে লুপ করুন।


ধন্যবাদ! আমি এটা জানতাম না। আমি মারতে বেশ নতুন।

শেল স্ক্রিপ্টিং ডাং ব্লাস্টেড মজা! আপনি এটি আরও বেশি পছন্দ করবেন এবং আপনি এটি যত বেশি ব্যবহার করবেন।

আরএসসিএন কমান্ড সমস্ত কাজ করতে পারে এমন সাধারণ ক্ষেত্রে অ্যারের মধ্য দিয়ে লুপ করার দরকার নেই
কুগার

1

কিছু লোক এখানে আসল প্রশ্নটি সঠিকভাবে পড়েছেন বলে মনে হয় না, তবে যেমনটি একটি প্রস্তাবিত: আপনি অ্যারে ব্যবহার করতে পারেন (এবং হওয়া উচিত)। আপনি কি সত্যিই ভেরিয়েবল সঞ্চিত ফোল্ডার নামের থাকে FOLDER1, FOLDER2ইত্যাদি, এবং এটি যে ভাবে রাখতে চান, আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

for i in {1..13}; do
   eval "FOLDER=\$FOLDER$i"
   rsync -arvz --delete "/home/emka/$FOLDER/" "/home/emka/Desktop/Mount/$FOLDER"
done

উদ্ধৃতি চিহ্নগুলি ব্যবহার করা একটি ভাল অভ্যাস এবং এই ক্ষেত্রে সেগুলি প্রয়োজন কারণ আপনার ডিরেক্টরিতে নামের নাম রয়েছে।


আপনি যদি rsync dir1 dir2 / করেন তবে dir1 সামগ্রীগুলি যাইহোক dir2 / dir1 এ থাকবে। আপনার পক্ষে "ফর" কমান্ডটি ব্যবহার করার দরকার নেই যতক্ষণ না OLD ফোল্ডারের নাম দু'দিকেই একই। {1..13} হ'ল বন্ধনী সম্প্রসারণ যা ভেরিয়েবল নামের আগে মূল্যায়ন করা হয় অর্থাৎ $ ফোল্ডার {1..13 $ যে কোনও উপায়ে OLD ফোল্ডার 1, $ ফোল্ডার 2,… any ফোল্ডার 13 তালিকা থাকবে
কুগার

0

ব্যাশ 3.0+ রেঞ্জ অ্যারে সমর্থন করে।

for i in {1..13}
do
    rsync -arvz --delete /home/emka/FOLDER${i}/ /home/emka/Desktop/Mount/FOLDER${i}
done

Ach। আমি এটি অর্থ হিসাবে পড়েছি আপনার 13 ফোল্ডার ফোল্ডার 1 নামে পরিচিত - ফোল্ডার 13. চালিয়ে যান!

0

বাশ ব্রেস প্রসারিত ব্যবহার করে আপনি কেবল এটি করতে পারেন:

rsync -arvz --delete /home/emka/$FOLDER{1..13} /home/emka/Desktop/Mount/

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

cd /home/emka
rsync -arvz --delete ${folderarray[@]} /home/emka/Desktop/Mount/

এই লাইনের শুরুতে "প্রতিধ্বনি" রাখুন এটি দেখার জন্য প্রথম ব্যবহারের আগে এটি কী করতে চলেছে :-)

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