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


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বা -exec। grepব্যবহার ! -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.