ফোল্ডার ছাড়া নিজেই কীভাবে ফোল্ডার থেকে ফাইলগুলি অনুলিপি করবেন


39

আমি নিজেই এ ছাড়া একটি ফোল্ডার থেকে ফাইল এবং সাবফোল্ডারগুলি অনুলিপি করার চেষ্টা করছি । উদাহরণস্বরূপ, একটি ফোল্ডারে পরবর্তী থাকে:

| file1.txt   
| file2.txt    
| subfolder1   

পরবর্তী কমান্ড কার্যকর করা আমাকে ভুল ফলাফল দেয়:

sudo cp -r /home/username/A/ /usr/lib/B/

ফলাফল হলো

/usr/lib/B/A/...copied files...

পরিবর্তে..

/usr/lib/B/...copied files...

উত্স-ফোল্ডার ছাড়াই আমি কীভাবে প্রত্যাশিতটিতে পৌঁছতে পারি

উত্তর:


67

উন্নত সিপি

cp -r /home/username/A/. /usr/lib/B/

এটি বিশেষত দুর্দান্ত কারণ এটি লক্ষ্য ডিরেক্টরিটি ইতিমধ্যে বিদ্যমান কিনা তা কার্যকর করে না।

শেল গ্লোববিং

ডিরেক্টরিতে যদি খুব বেশি অবজেক্ট না থাকে তবে আপনি শেল গ্লোব্বিং ব্যবহার করতে পারেন:

mkdir -p /usr/lib/B/
shopt -s dotglob
cp -r /home/username/A/* /usr/lib/B/

rsync

rsync -a /home/username/A/ /usr/lib/B/

/উৎস পথ শেষে গুরুত্বপূর্ণ; লক্ষ্য ডিরেক্টরি ইতিমধ্যে বিদ্যমান কিনা তা নিয়ে কাজ করে।

আবিষ্কার

mkdir -p /usr/lib/B/
find /home/username/A/ -mindepth 1 -maxdepth 1 -exec cp -r -t /usr/lib/B/ {} +

বা যদি আপনার খালি সাব ডিরেক্টরিগুলি প্রয়োজন না হয়:

find /home/username/A/ -mindepth 1 -type f -exec cp --parents -t /usr/lib/B/ {} +

(ছাড়া mkdir)


প্রথমটি ঠিক কাজ করে! কোনও ধারণা কেন বাড়ি / ব্যবহারকারীর নাম / এ / * (তারা-প্রতীক সহ) বোঝায় না? শেষে বিন্দু সহ বৈকল্পিক আমাকে সাহায্য করেছে, ধন্যবাদ!
— পুশন্দপপ

@ পুশান্দপপ A/*বোঝা যায় কিন্তু এমন পরিস্থিতি রয়েছে যেখানে এটি কার্যকর হয় না।
— হউক লেগেইং

3
shoptহয় bashনির্দিষ্ট। সাথে zsh, ব্যবহার *(D)। সঙ্গে ksh93, FIGNORE='@(.|..)'। cp -tজিএনইউ নির্দিষ্ট। findএক ঠিকমত কাজ করবে না যেমন উভয় কপি হবে A/এবং (subdirs সহ) বেশ কয়েকবার এর বিষয়বস্তু।
— স্টাফেন চেজেলাস 25'15

1
এছাড়াও আপনি চান -maxdepth 1( -mindepthএবং -maxdepth। হচ্ছে গনুহ এক্সটেনশান এখন এছাড়াও অন্য কয়েকজন Portably দ্বারা সমর্থিত find .../. ! -name . -prune -exec ....)
— Stéphane Chazelas

@ স্টাফেনচাজেলাস আমি অনুমান করি যে কোথাও একটি টাইপো আছে। find .../.এখানে একটি ত্রুটি ঘটায়।
— হউক লেগেইং

10

যদি কোনও জিএনইউ সিস্টেমে থাকে তবে থেকে man cp:

   -T, --no-target-directory
          treat DEST as a normal file

এটি আপনাকে cp -rT /home/username/A/ /usr/lib/B/সঠিক জিনিসটি লেখার অনুমতি দেয় ।


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, এটি শেল গ্লোব্বিং বা অন্য কিছু ব্যবহার করার চেয়ে উপযুক্ত cp। তবে এটি সত্য যে -Tকোনও নন-জিএনইউ নিয়ে কাজ করবে না cp।
— noraj

3

cpডিরেক্টরিটির বিষয়বস্তু অনুলিপি করতে বলুন এবং ডিরেক্টরিটি নিজেই নয়:

sudo cp -r /home/username/A/* /usr/lib/B/

ধন্যবাদ! তবে এতে বলা হয়েছে: / usr / lib / B / ডিরেক্টরি নয়
— পুশন্দপপ

আপনি করতে হবে shopt -s dotglobযদি কোনো dotfiles হয় কাজ করানোর জন্য /home/username/A/।
— টক্লাউড

1
@ পুশান্দপ ভাল, হ্যাঁ এটি আপনার প্রশ্নে লক্ষ্য ছিল তাই আমি ধরে নিলাম এটি একটি ডিরেক্টরি। এতে ফাইলগুলি অনুলিপি করার চেষ্টা করার আগে আপনাকে লক্ষ্য তৈরি করতে হবে।
— টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.