বর্তমান ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরিকে উপ-ডিরেক্টরিতে অনুলিপি করতে আমি কীভাবে লিনাক্স টার্মিনালটি ব্যবহার করতে পারি?
বর্তমান ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরিকে উপ-ডিরেক্টরিতে অনুলিপি করতে আমি কীভাবে লিনাক্স টার্মিনালটি ব্যবহার করতে পারি?
উত্তর:
যদি আপনি ফোল্ডারের সামগ্রীগুলি পুনরাবৃত্তভাবে অনুলিপি করতে চান (নীচে 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
(এটি একটি ত্রুটি বার্তা উত্পন্ন করবে)।