বর্তমান ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরিকে উপ-ডিরেক্টরিতে অনুলিপি করতে আমি কীভাবে লিনাক্স টার্মিনালটি ব্যবহার করতে পারি?
বর্তমান ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরিকে উপ-ডিরেক্টরিতে অনুলিপি করতে আমি কীভাবে লিনাক্স টার্মিনালটি ব্যবহার করতে পারি?
উত্তর:
যদি আপনি ফোল্ডারের সামগ্রীগুলি পুনরাবৃত্তভাবে অনুলিপি করতে চান (নীচে 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কোডটি দিয়ে সন্তুষ্ট : ডি
xargsবা -exec। grepব্যবহার ! -name "$TARGETDIR"বা অনুরূপ প্রয়োজন নেই । আপনার চারপাশে তুলনামূলক মিল নেই $file। আমি মনে করি না যে কোনও পুনরাবৃত্তি cpআপনার প্রথম কমান্ড ব্যতীত অন্য কোনও উদ্দেশ্যে যেমন কাজ করবে সেভাবে কাজ করবে।
ধরুন 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/।
আমি উত্স ডিরেক্টরিের বাইরে লক্ষ্য ডিরেক্টরিটি সরানোর পরামর্শ দেব এবং তারপরে এটিকে আবার ফিরিয়ে দেব; আপনি যদি অন্য প্রক্রিয়াগুলিতে হস্তক্ষেপ / হস্তক্ষেপের প্রত্যাশা না করেন তবে এমভি নিখরচায় (যদি আপনি কোনও আলাদা ফাইল সিস্টেমে না যাওয়ার বিষয়ে সতর্ক হন)।
উপরে উল্লিখিত বেশিরভাগ সমাধানগুলি ফাইলনেমগুলিতে ফাঁকা থাকলে কাজ করবে না। আমি ফাইন্ড-প্রিন্ট0 | এর রূপগুলি ব্যবহার করার পরামর্শ দেব xargs -0, বা সন্ধান-এক্সেক, ইত্যাদি
এটি কি আপনার পক্ষে কাজ করবে?
cp -r * subdir/
যদি আপনি বোঝাতে চান যে বর্তমান দীরের সমস্ত কিছু উপ-ডিরেক্টরিতে অনুলিপি করার পরিবর্তে স্থানান্তরিত করতে চান তবে আপনি এটি করতে পারেন:
mv * subdir/
এটি ডট ফাইল সহ সমস্ত লক্ষ্য অনুলিপি করে লক্ষ্য ডিরেক্টরিকে অন্তর্ভুক্ত না করে SUBDIR:
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
এটি dirCopy.sh ফাইলটি বলে
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
আপনার কনসোলে এটি "sh dirCopy.sh" হিসাবে চালান
ls: for file in *। ব্যাকটিকসের প্রয়োজন নেই - ব্যবহার করুন $()। কমান্ডের $()চারপাশে ব্যাকটিক্স (বা ) দরকার নেই cp(এটি একটি ত্রুটি বার্তা উত্পন্ন করবে)।