Cp কমান্ড ব্যবহার করে ডিরেক্টরি বিষয়বস্তু অনুলিপি করুন


33

আপনি কীভাবে একটি ডিরেক্টরিতে সমস্ত ডিরেক্টরি অন্য অনুলিপি করবেন?

উদাহরণ স্বরূপ:

$ cd /home/newuser
$ cp -a /backup/olduser/* .

উপরের সমস্যাটি হ'ল গ্লোবিং প্যাটার্ন '*' লুকানো ডিরেক্টরিগুলির সাথে মেলে '' এবং '..' এবং আপনি 'newuser' এর ভিতরে একটি ডিরেক্টরি 'ওল্ডুউজার', পাশাপাশি সামগ্রীকরণগুলি সমাপ্ত করেন।

আপনি এটির মতোও কিছু করতে পারেন:

$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser

তবে কি যদি নতুন ব্যবহারকারী ইতিমধ্যে কিছু ডিফল্ট ফাইল এবং ডিরেক্টরি থাকে?

কেবল মৌলিক 'সিপি' কমান্ড এবং শেল ব্যবহার করে একটি ডিরেক্টরিতে অন্য বিষয়বস্তুতে অন্য ডিরেক্টরিতে স্থানান্তরিত করার জন্য সবচেয়ে সহজ, সবচেয়ে সঠিক, সহজ মনে রাখা সবচেয়ে সহজ এবং সহজ উপায় কী?

উত্তর:


31

চেষ্টা করুন:

cp -ra /backup/olduser/. /home/newuser

এটি দুর্দান্ত, তবে এটি কীভাবে কাজ করে তা আমি ঠিক বুঝতে পারি না। আমি মনে করি এটি সম্ভবত কারণ আমি কীভাবে কাজ করব .এবং বুঝতে পারি না ..। বোঝাতে কি যত্ন?
bradley.ayers

এটি আমার পক্ষে কাজ করেছিল কিন্তু cp -r ./a bতা করেনি। কোন ধারণা কেন?
ব্রিটেন

3
আমার জন্যও কাজ করে, তবে rবিকল্পের দরকার নেই। aবিকল্প বোঝা r
মাউন্টেনএক্স

1
-আর প্যারামিটারটি এই মুহুর্তে কিছুটা রিডানডান্ট মনে হচ্ছে!
উদযাপনের মাস্টার

-aপরামিতি এই অবস্থায় সাহায্যের কিছুই না। কমান্ড cp -r ./a/. bবিষয়বস্তু, এবং শুধুমাত্র বিষয়বস্তু, ডিরেক্টরি কপি হবে aডিরেক্টরির মধ্যে b-aপতাকা সংরক্ষণ লিঙ্ক, টাইমস্ট্যাম্প ইত্যাদি, যা প্রশ্নের প্রাসঙ্গিক নয়।
স্টেইন শ্যাট

23

দুটি ডিরেক্টরি ক এবং খ।

উভয় ফাইল আছে।

আপনি একটি ডিরেক্টরিতে আছেন যাতে একটি এবং বি রয়েছে।

cp -r ./a b

-r = পুনরাবৃত্তি।


আপনি কি সব ফাইল পেতে চান না?
BW

7
-আর্গুমেন্টটি সমস্ত ফাইলের সাথে কিছুই করার নয়, এটি সংরক্ষণাগারটির জন্য সংক্ষিপ্ত, এটি ফাইলের মালিকানা, অনুমতি এবং অ্যাক্সেসের সময়গুলি সংরক্ষণ করবে argumentএ আর্গুমেন্ট (অত্যধিক কার্যকর) কোনও স্ট্যান্ডার্ড বিকল্প নয় এবং কয়েকটি সিপি বাস্তবায়ন ডন নয় এটি সরবরাহ করবে না।
theotherreceive

1
@ এমসিএচ: স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত, কারণ আপনি cpএকটি ডিরেক্টরি অনুলিপি করতে বলেছিলেন aএবং এতে a/.somedotfileঅন্তর্ভুক্ত রয়েছে a। যদি bবিদ্যমান, এই কমান্ডের একটি সঠিক অনুলিপি তৈরি করবে ab/a
কোয়াকোট কোয়েক্সোট

2
সহজ উপায়:cp -R /some/dir/* /another/dir
n0pe

1
এটি a / foo to b / a / foo কে b / foo এর পরিবর্তে অনুলিপি করে
স্পার

19

যে মনে রাখবেন, ডিফল্টরূপে, cpকপি প্রথম ডিরেক্টরির মধ্যে দ্বিতীয় ডিরেক্টরির দ্বিতীয় যদি উপস্থিত থাকে।

উদাহরণস্বরূপ cp -r a bকপি হবে ডিরেক্টরির a মধ্যে b। যদি bঅস্তিত্ব না থাকে তবে বিষয়বস্তু দিয়ে এটি তৈরি করা হবে a

আপনি অনুলিপি করতে চান তাহলে বিষয়বস্তু এর aমধ্যে bব্যবহার (একটি মাউন্ট পয়েন্ট মধ্যে একটি পুরো ফাইলসিস্টেম অনুলিপি উদাহরণস্বরূপ):

cp -r a/. b

আগের উত্তরের মত

দয়া করে নোট করুন যে -a, অন্যান্য উত্তরগুলির -dr --preserve=allকয়েকটিতে ব্যবহৃত, একই রকম এবং টাইমস্ট্যাম্পগুলি, প্রসঙ্গ এবং বর্ধিত বৈশিষ্ট্যগুলি সংরক্ষণ করবে।


কিভাবে /.কাজ করে?
bradley.ayers

a/.ডিরেক্টরিটির বিপরীতে 'ক' ডিরেক্টরিটির বিষয়বস্তু প্রতিনিধিত্ব করে, বেশিরভাগ পরিস্থিতিতে এটি সমার্থক তবে ব্যবহার করার সময় cp -rএটি সিপি ডিফল্ট আচরণ এড়িয়ে যায় (একটি আইএনটিও বি অনুলিপি করে)।
নিকোলাস বোনেফন

দুর্দান্ত টিপ, এটি আমি ঠিক যা খুঁজছিলাম কিন্তু অন্য কোথাও খুঁজে পেতে ব্যর্থ হয়েছি - কোণার ক্ষেত্রে ব্যর্থ হওয়া সমস্ত 'foo / *' বা '-r foo /'।
টেনার

@ টিমো হুওভিনেন ' মোটেই ওয়াইল্ডকার্ড নয়। এটি আক্ষরিক অর্থে "প্যারেন্ট" ডিরেক্টরি এবং '..' হ'ল দাদা arent এর অর্থ '/foo/././//////' '/ foo' এর মতো একই ডিরেক্টরি, এবং '/ foo' / বার / .. 'একই ডিরেক্টরি' / foo 'as এগুলিকে হার্ডলিঙ্ক হিসাবে ভাবেন যা ফাইল সিস্টেমের অন্তর্নির্মিত।
কুইকসম্যান

@ কুক্সমান আপনাকে ধন্যবাদ, আমি এর আগে আর জানতাম না। লোকজনকে বিভ্রান্ত করতে এড়াতে আমি আমার পুরানো মন্তব্য সরিয়ে ফেলব।
টিমো হুভিনেন

6

আপনি যদি নিজের শেলটিকে গুরুত্ব সহকারে পুনরায় কনফিগার না করেন তবে গ্লোব্বিং প্যাটার্ন '*' মেলে না '' ' বা '..', যেমন আপনি কেবল প্রতিধ্বনি * ব্যবহার করে যাচাই করতে পারেন। পরিবর্তে এটি যা করে তা হ'ল ফাইলগুলি বাদ দেওয়া যাহার নাম '।' দিয়ে শুরু হয়, সুতরাং আপনার পদ্ধতির সমস্ত লুকানো ফাইল মিস হবে। আপনি শেল বিকল্পগুলির সাথে এই আচরণের কিছুটা ঝাঁকুনি করতে পারেন, উদাহরণস্বরূপ ব্যাশে ডটগ্লোব বিকল্প, তবে এটি পরে অনুসন্ধানযোগ্য পোর্টেবল এবং মজবুত বিকল্প হবে না।

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

আরেকটি বিকল্প হ'ল উত্স ডিরেক্টরিটি একটি টারবলে স্থাপন করা এবং এটি বিদ্যমান টার্গেট ডিরেক্টরি থেকে অনার করে দেওয়া।


1
আমি এটি ব্যবহার করি: ( cd /src/dir ; tar cf - . ) | ( cd /dest/dir ; tar xf - )... tar cf - .তারের উত্স ডিরেক্টরিটি, ডটফাইলগুলি অন্তর্ভুক্ত রয়েছে এবং এটি এসটিডিআউটিতে স্পিট করে, যা এসটিডিআইএন-এর পাইপযুক্ত হয় tar xf -
কোয়াকোট কোয়েসোট

আমি মনে করি যে ওপি'র পুরো পয়েন্টটি কীভাবে 'এর সাথে শুরু হওয়া ফাইলগুলি উল্লেখ করা যায়।' কিন্তু না বিশেষ '।' এবং '..' ডিরেক্টরি। আরএসসিএনসি বা কিছু অন্যান্য জটিল প্রোগ্রাম ব্যবহার না করে উপরে আরও অনেক মার্জিত সমাধান রয়েছে।
কুইকসম্যান

2

এটি প্যারেন্ট ডিরেক্টরি ( ..) বাদ দিলে সাধারণ এবং লুকানো উভয় ফাইলই অনুলিপি করবে :

cd /directory/to/copy
cp -r * .[^.]* /destination/directory

আপনি যদি পিতামহিত ডিরেক্টরিটি বাদ না দেন তবে আপনি ..আপনার গন্তব্য ডিরেক্টরিতে সমস্ত বিষয়বস্তুও শেষ করে দেবেন ।


1
তবে এটি এখনও (যেমন, বা ) দিয়ে শুরু হওয়া নামগুলি বাদ দেয় । .......super-hidden
স্কট

0

বিন্দু দিয়ে শুরু হওয়া ফাইলগুলি অনুলিপি করতে কেবল সিপি করুন * * লক্ষ্য /

তাই সহজ দুটি বার সিপি কমান্ড করা।

পিটার আইজেনট্রাট সাইস হিসাবে সাধারণ গ্লোববিং বিধিগুলিকে অন্তর্ভুক্ত করে না .. এবং। (এইচএম, এই বাক্যটি কীভাবে শেষ করা যায় ?;)

এটিকে পুনরাবৃত্ত করার জন্য কেবল -r ব্যবহার করুন এবং -i সিপি তৈরি করতে আপনি সত্যিই কোনও ফাইল ওভাররাইট করতে চান কিনা তা জিজ্ঞাসা করুন।

cp -ri /backup/olduser/* /newuser/
cp -ri /backup/olduser/.* /newuser/

সাধারণত *মেলে না .বা .., কিন্তু যদি আপনি ব্যবহার এটা আছে .*। ব্যবহার করে দেখুন echo .*। আপনি বাদ পারেন .এবং ..নিম্নলিখিত প্যাটার্ন সঙ্গে .[^.]*
এমচি

@ এমসিএচ: তবে .[^.]*এখনও শুরু হওয়া নামগুলি বাদ দেয় না ..(যেমন, ...বা ..super-hidden)।
স্কট

0

এটি বর্তমান ডিরেক্টরি থেকে যেখানেই পুনরাবৃত্তভাবে লুকানো ডিরেক্টরিগুলি বাদ দিয়ে সমস্ত ফাইল এবং ডিরেক্টরিগুলি অনুলিপি করার জন্য কাজ করে:

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