উত্তর:
একক ফাইলের জন্য আপনি tee
একাধিক জায়গায় অনুলিপি করতে পারেন :
cat <inputfile> | tee <outfile1> <outfile2> > <outfile3>
অথবা আপনি যদি ডেমোগিগিফিক সংস্করণ পছন্দ করেন:
tee <outfile1> <outfile2> > <outfile3> < <inputfile>
নোট করুন যেহেতু ডেনিস মন্তব্যগুলির tee
আউটপুটগুলিতে stdout
পাশাপাশি তালিকাভুক্ত ফাইলগুলিতে উল্লেখ করেছেন, সুতরাং উপরের উদাহরণগুলিতে 3 ফাইলটি নির্দেশিত করতে পুনঃনির্দেশ ব্যবহার করে। আপনি /dev/null
এটি নীচে হিসাবেও পুনর্নির্দেশ করতে পারেন - কমান্ড লাইনে ফাইল তালিকাটি আরও ধারাবাহিকভাবে রাখার সুবিধা রয়েছে (যা ফাইলের পরিবর্তনশীল সংখ্যার জন্য সমাধানের স্ক্রিপ্ট তৈরি করা সহজ করতে পারে) তবে এটি কিছুটা কম দক্ষ (যদিও এটি দক্ষতা পার্থক্য ছোট: cat
সংস্করণ বা সংস্করণ ছাড়া ব্যবহারের মধ্যে পার্থক্য প্রায় cat
):
cat <inputfile> | tee <outfile1> <outfile2> <outfile3> > /dev/null
আপনি সম্ভবত find
একটি ডিরেক্টরিতে একাধিক ফাইল পরিচালনা করতে এবং খুব সহজেই ডিরেক্টরি কাঠামোর মধ্যে ছড়িয়ে পড়া ফাইলগুলিতে অপারেটিং করতে খুব সহজেই উপরের যে কোনওটিকে একত্রিত করতে পারেন। অন্যথায় আপনাকে কেবল পৃথক কার্য হিসাবে সমান্তরালে একাধিক অনুলিপি অপারেশন সেট করতে হবে এবং আশা করতে হবে যে ওএস ডিস্কের ক্যাশেটি উজ্জ্বল এবং / বা যথেষ্ট বড় যে প্রতিটি সমান্তরাল কাজ প্রথম থেকে ক্যাশেড ডেটা ব্যবহার করে ড্রাইভ-হেডের পরিবর্তে পিটুনি।
উপলভ্যতা: tee
সাধারণত জিএনইউ "কোর্টিলস" প্যাকেজের অংশ হিসাবে স্ট্যান্ডার্ড লিনাক্স সেটআপগুলি এবং অন্যান্য ইউনিক্স বা ইউনিক্স-অ্যালাইক সিস্টেমে সাধারণত উপলব্ধ। আপনি যদি উইন্ডোজ ব্যবহার করে থাকেন (আপনার প্রশ্নটি নির্দিষ্ট করে না) তবে আপনার এটি সাইগউইনের মতো বিভিন্ন উইন্ডোজ বন্দরে সন্ধান করা উচিত।
অগ্রগতি তথ্য: অপটিকাল মিডিয়া থেকে একটি বড় ফাইল অনুলিপি করতে কিছু সময় লাগতে পারে (বা ধীর নেটওয়ার্কের উপরে, বা এমনকি স্থানীয় দ্রুত মিডিয়া থেকে আরও বড় ফাইল), অগ্রগতির তথ্য কার্যকর হতে পারে। কমান্ড লাইন আমি ব্যবহারের প্রবণতা নল ভিউয়ার এই জন্য (অধিকাংশ লিনাক্স ডিস্ট্রো & অনেক উইন্ডোজ বন্দর সংগ্রহ এবং সহজ লভ্য যেখানে উপলব্ধ সরাসরি নিজেকে কম্পাইল করার) - মাত্র প্রতিস্থাপন cat
সঙ্গে pv
যেমন:
pv <inputfile> | tee <outfile1> <outfile2> > <outfile3>
tee
স্ট্যান্ডআউটে আউটপুট হবে, সুতরাং আপনি tee outputfile1 outputfile2 < inputfile > /dev/null
টার্মিনালে একটি বাইনারি ফাইল আউটপুট আউট করানো যেহেতু এটি করতে চাইতে পারেন এটির সেটিংসের সাথে গোলমাল এবং গোলযোগ হতে পারে।
tar cf - file1 file2 | tee >(tar xf - -C ouput1) | tar xf - -C output2
উইন্ডোজ জন্য:
n2ncopy এটি করবে:
লিনাক্সের জন্য:
cp
কমান্ড একা একাধিক উত্স কিন্তু দুর্ভাগ্যবশত বহু না গন্তব্যস্থল থেকে অনুলিপি করতে পারবেন। আপনার এটি কোনও ধরণের লুপে একাধিকবার চালানো দরকার। আপনি এর মতো একটি লুপ ব্যবহার করতে পারেন এবং একটি ডিরেক্টরিতে সমস্ত ডিরেক্টরি নাম রাখতে পারেন:
OLDIFS=$IFS
IFS=$'\n'
for line in $(cat file.txt):
do
cp file $line
done
IFS=$OLDIFS
বা xargs ব্যবহার করুন:
echo dir1 dir2 dir3 | xargs -n 1 cp file1
এই দুটিই আপনাকে সম্পূর্ণ ডিরেক্টরি / একাধিক ফাইল অনুলিপি করার অনুমতি দেবে। এটাও আলোচনা করা হয়েছে এই Stackoverflow নিবন্ধ।
অনুরূপ প্রশ্নের জন্য দেওয়া উত্তরের ভিত্তিতে আরেকটি উপায় হ'ল একবারে একাধিক ইনস্ট্যান্স চালানোর জন্য জিএনইউ সমান্তরাল ব্যবহার করা cp
:
parallel -j 0 -N 1 cp file1 ::: Destination1 Destination2 Destination3
উপরের কমান্ডটি ফাইলটিকে সমান্তরালভাবে তিনটি গন্তব্য ফোল্ডারে কপি করবে
ব্যাশে (লিনাক্স, ম্যাক বা সাইগউইন):
cat source | tee target1 target2 >targetN
(টি এটি স্টপআউটে এর ইনপুট অনুলিপি করে, তাই শেষ লক্ষ্যকে পুনর্নির্দেশ ব্যবহার করুন)।
উইন্ডোজে সাইগউইন প্রায়শই ওভারকিল করে। পরিবর্তে, আপনি কেবল আনেক্সটিলস প্রকল্পের এক্সেস যোগ করতে পারেন , যার মধ্যে বিড়াল, টি এবং আরও অনেক কিছু রয়েছে।
রায়ান থম্পসনের সমাধান:
for x in dest1 dest2 dest3; do cp srcfile $x &>/dev/null &; done; wait;
অনেকটা অর্থবহ করে তোলে: গন্তব্য ডায়ারগুলির লেখার গতি যদি প্রায় একই হয় তবে ডিস্ক থেকে কেবলমাত্র একবারে সিআরসিফাইল পড়তে হবে। বাকি সময় এটি ক্যাশে থেকে পড়া হবে।
আমি এটিকে কিছুটা সাধারণ করে তুলব, যাতে আপনি সাবডিয়ারও পান:
for x in dest1 dest2 dest3; do cp -a srcdir $x &; done; wait;
যদি ডেস্ট ডায়ারগুলির লেখার গতি খুব আলাদা হয় (যেমন একটি র্যাম ডিস্কে থাকে এবং অন্যটি এনএফএসে থাকে), তবে আপনি দেখতে পাবেন srcdir এর অংশগুলি লেখার সময় ডিস্ক ক্যাশে আর নেই dest2।
এই উত্তর অনুসারে: /superuser//a/1064516/702806
একটি ভাল সমাধান ব্যবহার tar
এবং tee
। কমান্ডটি আরও জটিল তবে tar
স্থানান্তরের জন্য এটি বেশ শক্তিশালী বলে মনে হচ্ছে এবং উত্সটি একবারে পড়া দরকার।
tar -c /source/dirA/ /source/file1 | tee >(cd /foo/destination3/; tar -x) >(cd /bar/destination2/; tar -x) >(cd /foobar/destination1/; tar -x) > /dev/null
এটি কোনও স্ক্রিপ্টে ব্যবহার করতে আপনার স্ক্রিপ্টটি চালু করতে হতে পারে bash -x script.sh
tar
যে যুক্তিটি দেখতে পাচ্ছি তা হ'ল এটি স্বয়ংক্রিয়ভাবে ফাইলের বৈশিষ্ট্যগুলি (যেমন, পরিবর্তনের তারিখ / সময়, (সুরক্ষা) মোড এবং সম্ভাব্য এসিএল, মালিক / গোষ্ঠী (সুবিধাপ্রাপ্ত হলে) অনুলিপি করবে) প্রসঙ্গ (প্রযোজ্য ক্ষেত্রে), বর্ধিত বৈশিষ্ট্য (প্রযোজ্য ক্ষেত্রে), ইত্যাদি)………………… পিএস ব্যবহারকারীর কেন ব্যবহারের প্রয়োজন হবে bash -x
?
#!/bin/sh
আমার স্ক্রিপ্টের শুরুতে ব্যবহার করেছি কিন্তু কমান্ডের বাক্য গঠন গ্রহণ করা হয় না। আপনি bash -x
বা #!/bin/bash
আপনার ফাইলের শুরুতে ব্যবহার করতে পারেন । আমি কেন জানি না sh
এবং bash
ব্যাখ্যাগুলির মধ্যে পার্থক্য রয়েছে ।
ব্যাশে:
for x in dest1 dest2 dest3; do cp srcfile $x &>/dev/null &; done; wait;
আপনি যদি উইন্ডোতে পাওয়ারশেল থেকে এটি করতে চান তবে এটি ডিফল্টরূপে সম্ভব নয় কারণ -Path
যুক্তির বিপরীতে , -Destination
একাধিক যুক্তি গ্রহণ করে না। তবে, আপনি ব্যবহার করতে পারেন-Passthrough
কমান্ডগুলি ডেইজি-চেইন এবং । (তবে এটি কোনও মজাদার নয়))
হিসাবে দেখানো হয় সবচেয়ে ভালো সমাধান, আপনার নিজের করা হয় এখানে ।