কমান্ড লাইনটি ব্যবহার করে একাধিক ফোল্ডারে কীভাবে একটি ফাইল অনুলিপি করবেন?


67

আমি test.txtএক কমান্ড দিয়ে একাধিক ডিরেক্টরিতে একটি ফাইল অনুলিপি করার চেষ্টা করেছি :

cp ~/test.txt ~/folder1 ~/folder2

তবে আমি সফল হইনি। এক কমান্ডে এটি করার কোনও উপায় আছে যাতে আমি একাধিক ডিরেক্টরিতে কোনও ফাইল বা একটি ফোল্ডারও অনুলিপি করতে পারি?


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

3
কিছুটা বাশ-স্ক্রিপ্ট শেখার চেষ্টা করুন। এটি খুব দরকারী হতে পারে:for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
শাহবাজ

একটি কমান্ড নয়, কেবল এমন কিছু লোককে সাহায্য করতে পারে যারা এখানে হোঁচট খাচ্ছে:cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
মনু জারভিনেন

উত্তর:


71

cpএকাধিক উত্স থেকে অনুলিপি করতে পারেন, তবে একাধিক গন্তব্যগুলিতে অনুলিপি করতে পারবেন না । দেখুন man cpআরও তথ্যের জন্য।

আমি জানি যে একমাত্র বাশ কমান্ডটি একাধিক গন্তব্যগুলিতে অনুলিপি / সংরক্ষণ করতে পারে tee

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

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt

নোট করুন যে teeস্ট্যান্ডার্ড আউটপুট (স্টাডআউট) এ ইনপুটটিও লিখে দেয়। সুতরাং আপনি যদি এটি না চান তবে আপনি স্ট্যান্ডার্ড আউটপুটটিকে নিম্নলিখিত /dev/nullহিসাবে পুনর্নির্দেশ করে এটি প্রতিরোধ করতে পারেন :

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null

10
চতুর, যে প্রতারণা! :)
টেরডন

5
+1, চালাক! এবং যদি আপনি >/dev/nullটার্মিনালটি
গোলযোগ

1
আপনার জন্য +1, আপনার সর্বদা মা মানুষ :), তবে আমি যদি কোনও ডিরেক্টরি অনুলিপি করতে চাই তবে কী হবে?
nux

2
@nux ডিরেক্টরিগুলির ক্ষেত্রে -rবিকল্পটি ব্যবহার করতে ভুলবেন নাcp
রাদু রেডানু

4
@nux: teeঅসদৃশ cpকপি শুধুমাত্র ফাইলের বিষয়বস্তু তার মোড, মালিকানা টাইমস্ট্যাম্প উপেক্ষা। ফাইলের f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
নামটি

61

একাধিক অবস্থানের অনুলিপি অর্জনের অন্য উপায়টি হ'ল নিম্নলিখিত আদেশটি:

find dir1 dir2 -exec cp file.txt {} \;

যদি dir1 বা dir2 এর উপ-ডিরেক্টরি থাকে যে আপনি ফাইলটি অনুলিপি করতে চান না, -maxdepth 0বিকল্প যুক্ত করুন:

find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;

মনে রাখবেন, এই প্রতিটি ফাইল ওভাররাইট করবে dir1এবং dir2সঙ্গে file.txtএটি কপি করার 'র বিষয়বস্তু ছাড়াও। file.txtএই ডিরেক্টরিগুলির মধ্যে অন্যান্য ফাইলগুলিকে প্রভাবিত না করে কেবল অনুলিপি করতে কেবল ডিরেক্টরিতে findকাজ করতে বলুন :

find dir1 dir2 -type d -exec cp file.txt {} \;

4
চমৎকার সমাধান! টিয়ের চেয়ে আমার কাছে আরও নিখুঁত লাগে।
দানাতেলা

1
আসলে কোনও পুনঃনির্দেশ জড়িত নয় এবং এটি এখনও একটি আদেশ।
সিলভাইন পাইনাউ

2
@ সিলওয়াইনপাইনউ আসলে এখানে 3 জন রয়েছে: একটি হ'ল findএবং দু'বারের জন্য (এই ক্ষেত্রে) cp। এটি না বলে findঅনেক সময় প্রয়োজন।
রাদু রেদেনু

3
যদি "কমান্ড" এর সংজ্ঞাটি একটি "এক্সিকিউটিভ" কল হয়, তবে এটি আমার বইয়ের "ওয়ান কমান্ড"।
কোজিরো

2
আমি এটির কাছে ফিরে আসছি, তাই ভেবেছিলাম আমার উচিৎ উচিত: ডি
জোনাথন

31

আদেশ

cp ~/test.txt ~/folder1 ~/folder2

গন্তব্যে দুটি ফাইল ( ~/test.txtএবং ~/folder1) অনুলিপি করার চেষ্টা করে folder2। (এবং যদি ~/folder2উপস্থিত থাকে এবং ডিরেক্টরি হয় তবে আপনার "বাদ দেওয়া ডিরেক্টরি" সতর্কতা থাকবে)।

আপনি যদি ফাইলটির একাধিক অনুলিপি তৈরি করতে চান তবে আপনাকে test.txtএকটি লুপ বা একাধিক কমান্ড ব্যবহার করতে হবে ...

for i in ~/folder1 ~/folder2; do cp  ~/test.txt $i; done 

(... এবং আপনার যদি ফাইলের নাম এম্বেড করে ফাঁকা স্থান থাকে তবে সাবধান হন) আপনার উদ্ধৃতি লাগবে)

পুরো ডিরেক্টরিগুলি অনুলিপি করতে আপনাকে -rবিকল্পটি ব্যবহার করতে হবে :

for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done

এটি তৈরি করবে ~/folder1/folder3এবং ~/folder2/folder3সমস্ত ফাইল অন্তর্ভুক্ত থাকবে।


1
উত্তীর্ণ পাঠকের জন্য: অনুমান অনুসারে একটি ফর লুপ একটি যৌগিক আদেশ। সুতরাং এটি এখনও একটি আদেশ, এবং প্রশ্নের সমস্ত প্রয়োজনীয়তা পূরণ করে।
কোজিরো

@ নাক্স, আমি সংশোধনগুলির সাথে একমত নই। 1) দুটি রাজধানী ভুল, আমার উদ্দেশ্য হ'ল কমান্ডগুলি বাক্যাংশের মধ্যে বিভক্ত করা। 2) উপবৃত্ত শৈলীর বিষয়; দয়া করে আমার স্টাইলটি let
ুকতে

1
ঠিক আছে, আমি দুঃখিত মানুষ, আমি ভেবেছিলাম এটি আরও ভাল দেখাচ্ছে।
nux

আমার সিস্টেমে এটি ফোল্ডার 3 কে ~ / ফোল্ডার 1 / ফোল্ডার 3 হিসাবে সংরক্ষণ করে না, বরং ফোল্ডার 3 এর সমস্ত কিছু ফোল্ডার 1-এ অনুলিপি করে
alpha_989

23

আপনি একটি সহায়তা স্ক্রিপ্ট তৈরি করতে পারেন, বা আপনি এটি দিয়ে xargsএবং একটি মুদ্রণ ফাংশন (এই ক্ষেত্রে, echo) করতে পারেন:

echo firstDir secondDir | xargs -n 1 cp test

এটি প্রতিটি ডিরেক্টরিকে প্যারামিটার হিসাবে টেস্ট ফাইল cpব্যবহার করে ফাংশনের আর্গুমেন্ট হিসাবে তৈরি করবে ।


এটি সম্ভবত প্রশ্নের সেরা / সর্বাধিক প্রত্যক্ষ উত্তর
ব্রায়সন এস

7

দীর্ঘ অনুসন্ধানের পরেও এই কাজটি মনোমুগ্ধকর মতো!

for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done

এটি টার্মিনালে আপনার বর্তমান অবস্থানের প্রতিটি ডিরেক্টরিতে file.txt অনুলিপি করবে ।

for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done

এটি টার্মিনালে আপনার বর্তমান অবস্থানের প্রতিটি উপ ডিরেক্টরিতে একটি ফোল্ডার অনুলিপি করবে।

আমি এটি ভাগ করে নেওয়ার আশা করি এটি অন্যকেও সহায়তা করে।


ইন zsh, আপনি for i in *(/); ...সমস্ত উপ-ডিরেক্টরিতে লুপ করতে ব্যবহার করতে পারেন , যাতে আপনি [ -d ...পরীক্ষা এড়াতে পারেন । আমি এটি পছন্দ করার অন্যতম কারণ বর্ধিত গ্লোববিং bash
রমানো

আপনার আদেশটি কোনও আদেশে আবার ডান করতে পারে
নেক্স

1
ইন zsh, এই উত্তর প্রথম কমান্ড হিসাবে সরলীকৃত করা যেতে পারে for dir in *(/); do cp /path/file.txt "$dir"; doneZsh.sourceforge.net/Intro/intro_2.html
রোমান

5
আপনি যে কোনও বোর্ন উদ্ভূত শেল দিয়ে পরীক্ষাটি শেষ করতে পারবেনfor dir in */;
হেন্ক ল্যাঙ্গভেল্ড

@nux এটি সত্যিই ভাল কাজ করে এবং কমান্ডটি অনুসরণ করা খুব সহজ। এটা অনেক বেশি ভোট দেওয়া উচিত!
নিউইগুয়ে

1

আপনি যদি প্রতিটি ডিরেক্টরিতে / টিএমপি / টার্গেট / এ টেস্ট.টেক্সট ফাইলটি অনুলিপি করতে চান ...

একটি পরীক্ষার পরিবেশ তৈরি করুন:

mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt

এটি অনুলিপি করুন:

find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;

0

এর উত্তরে কেবল একটি বৈচিত্র্য দেওয়ার কথা ভেবেছি Sylvain Pineau

আপনার বর্তমান ডিরেক্টরিতে কোথায় dir1এবং নেই dir2

find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;

এখানে dir1দুটি স্তরের গভীর সন্ধান করবে বা আপনি বর্তমান ডিরেক্টরিতে এবং এর নীচে সমস্ত ফোল্ডার -maxdepthসন্ধানের জন্য প্যারামিটারটি ছেড়ে দিতে পারেন dir1

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