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


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.