ডিরেক্টরি কপি করতে এবং এর মধ্যে নির্দিষ্ট ফাইল / উপ-ডিরেক্টরিগুলি বাদ দেওয়ার জন্য 'সিপি' কমান্ড ব্যবহার করার কোনও উপায় আছে কি?
ডিরেক্টরি কপি করতে এবং এর মধ্যে নির্দিষ্ট ফাইল / উপ-ডিরেক্টরিগুলি বাদ দেওয়ার জন্য 'সিপি' কমান্ড ব্যবহার করার কোনও উপায় আছে কি?
উত্তর:
ব্যবহার rsync
:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
নোট করুন যে ব্যবহার source
এবং source/
পৃথক। একটি পিছনে স্ল্যাশ মানে ফোল্ডারে থাকা সামগ্রীগুলি অনুলিপি source
করা destination
। পেছনের স্ল্যাশ ছাড়া এটির অর্থ ফোল্ডারের উত্সটি অনুলিপি করা destination
।
বিকল্পভাবে, যদি আপনার বাদ দেওয়ার জন্য প্রচুর ডিরেক্টরি (বা ফাইল) থাকে তবে আপনি ব্যবহার করতে পারেন --exclude-from=FILE
, যেখানে FILE
ফাইল বা ডিরেক্টরিগুলি অন্তর্ভুক্ত করার কোনও ফাইলের নাম নেই।
--exclude
এছাড়াও ওয়াইল্ডকার্ড থাকতে পারে --exclude=*/.svn*
অনুলিপি: https://stackoverflow.com/a/2194500/749232
আপনি যদি cp
নিজেই ব্যবহার করতে চান :
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
এটি ধরে নেয় টার্গেট ডিরেক্টরি কাঠামো উত্সের মতোই।
অনুলিপি করা হয়েছে: https://stackoverflow.com/a/4586025/749232
গেমটিতে দেরীতে হলেও এখানে প্লেইন ব্যাশ এবং সিপি ব্যবহার করে একেবারেই আলাদা সমাধান দেওয়া হচ্ছে: কিছু ফাইল উপেক্ষা করার সময় আপনি একটি গ্লোবাল ফাইলের স্পেসিফিকেশন ব্যবহার করতে পারেন।
ধরে নিন ডিরেক্টরিতে ফাইল রয়েছে:
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
গ্লোবগনোর ভেরিয়েবল ব্যবহার করা :
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
বা আরও নির্দিষ্ট ব্যতিক্রম সহ:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
বা নেতিবাচক মিলগুলি ব্যবহার করে :
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
এটি বেশ কয়েকটি মিলহীন নিদর্শনগুলিকে সমর্থন করে:
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3
shopt -s extglob
এছাড়াও আপনার রফতানি করার দরকার নেইGLOBIGNORE
: এটি বর্তমান শেলের আচরণটি পরিবর্তন করার কথা, বেশিরভাগ শিশু প্রোগ্রামগুলি এটিকে যত্ন করে না।