একটি ডিরেক্টরিকে বর্তমান ডিরেক্টরিতে অনুলিপি করা হচ্ছে


13

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


আপনি কপি বা সরানো মানে?
ক্রেগ

উত্তর:


12

যদি আপনি ফোল্ডারের সামগ্রীগুলি পুনরাবৃত্তভাবে অনুলিপি করতে চান (নীচে 1 টি ত্রুটি নিক্ষেপ করবে):

cp -r * sub/

আরও কিছুটা হ্যাকি, তবে খালি নয় এমন সাব-ডাইরেক্টরিগুলিতে কাজ করে:

TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"

আরেকজন অনেলাইনার:

TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done

বা পুনরাবৃত্তি:

TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done

সাব / খালি না হলে ক্ষেত্রে এটি কাজ করে না -> সাবটি আবার সাবতে অনুলিপি করা হবে, যদি না এটি @ ওজুজ চেয়েছিল।

ঠিক আছে আমি শেষ পর্যন্ত findকোডটি দিয়ে সন্তুষ্ট : ডি
লেকেনস্টেইন

2
আপনার দ্বিতীয় কমান্ড স্পেস অন্তর্ভুক্ত ফাইলের জন্য ব্যর্থ। ব্যবহার করুন xargsবা -execgrepব্যবহার ! -name "$TARGETDIR"বা অনুরূপ প্রয়োজন নেই । আপনার চারপাশে তুলনামূলক মিল নেই $file। আমি মনে করি না যে কোনও পুনরাবৃত্তি cpআপনার প্রথম কমান্ড ব্যতীত অন্য কোনও উদ্দেশ্যে যেমন কাজ করবে সেভাবে কাজ করবে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

ওহাহা, শেষ কোডগুলিতে একটি উদ্ধৃতি মিস করেছেন। ডেনিস ভাল মন্তব্য, আমি এই ক্ষেত্রে নাম ব্যবহার করার কথা কখনও ভাবিনি :)
লেকেনস্টেইন

4

ধরুন targetলক্ষ্য শৈলীর নাম হ'ল যদি আপনার শেলটি বাশ হয়:

shopt -s extglob
cp -r !(target) target/

Ksh এ, আপনি সরাসরি করতে পারেন cp -r !(target) target/

Zsh, আপনি কি করতে পারেন setopt ksh_globতারপর cp -r !(target) target/। আর একটি সম্ভাবনা setopt extended_globতখন cp -r ^target target/


2

আমি উত্স ডিরেক্টরিের বাইরে লক্ষ্য ডিরেক্টরিটি সরানোর পরামর্শ দেব এবং তারপরে এটিকে আবার ফিরিয়ে দেব; আপনি যদি অন্য প্রক্রিয়াগুলিতে হস্তক্ষেপ / হস্তক্ষেপের প্রত্যাশা না করেন তবে এমভি নিখরচায় (যদি আপনি কোনও আলাদা ফাইল সিস্টেমে না যাওয়ার বিষয়ে সতর্ক হন)।

উপরে উল্লিখিত বেশিরভাগ সমাধানগুলি ফাইলনেমগুলিতে ফাঁকা থাকলে কাজ করবে না। আমি ফাইন্ড-প্রিন্ট0 | এর রূপগুলি ব্যবহার করার পরামর্শ দেব xargs -0, বা সন্ধান-এক্সেক, ইত্যাদি


0

এটি কি আপনার পক্ষে কাজ করবে?

cp -r * subdir/

যদি আপনি বোঝাতে চান যে বর্তমান দীরের সমস্ত কিছু উপ-ডিরেক্টরিতে অনুলিপি করার পরিবর্তে স্থানান্তরিত করতে চান তবে আপনি এটি করতে পারেন:

mv * subdir/

এটি খালি নয় এমন ডিরেক্টরিগুলির যত্ন নেয় না

আমি কেবল পরীক্ষা করেছি, এবং এটি কার্যকর হয়েছে।
করলফিলিপ

আপনার @ খালি ফাঁকা ডিরেক্টরিগুলি অনুলিপি কপির দরকার যেমন @ লাইকেনস্টাইন প্রস্তাবিত।

-1

এটি ডট ফাইল সহ সমস্ত লক্ষ্য অনুলিপি করে লক্ষ্য ডিরেক্টরিকে অন্তর্ভুক্ত না করে SUBDIR:

for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done

2
স্থানের অন্তর্ভুক্ত ফাইলের নামের জন্য ব্যর্থ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

-1

এটি dirCopy.sh ফাইলটি বলে



for i in `ls`
do
        if [ $i != "subDir" ]
        then
                `cp -r $i subDir`
        fi
done

আপনার কনসোলে এটি "sh dirCopy.sh" হিসাবে চালান


2
কোন জন্য প্রয়োজন ls: for file in *। ব্যাকটিকসের প্রয়োজন নেই - ব্যবহার করুন $()। কমান্ডের $()চারপাশে ব্যাকটিক্স (বা ) দরকার নেই cp(এটি একটি ত্রুটি বার্তা উত্পন্ন করবে)।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.