উত্তর:
আপনি ব্যবহার করতে পারেন find:
find . -type f ! -name '*.txt' -delete
বা বাশের বর্ধিত গ্লোববিং বৈশিষ্ট্যগুলি:
shopt -s extglob
rm *.!(txt)
বা zsh এ:
setopt extendedglob
rm *~*.txt(.)
# || ^^^ Only plain files
# ||^^^^^ files ending in ".txt"
# | \Except
# \Everything
*.!(txt)হবে !(*.txt)?
rmফোল্ডার থাকলে শ্বাসরোধ করবে।
find . -type f ! -name "*.txt" | xargs -r rmজিএনইউ xargs এ কাজ করবে। বিএসডি এবং ইউনিক্স xargs কমান্ডের নাও থাকতে পারে man xargs
আপনি যদি কেবল '* .txt' ব্যতীত সমস্ত ফাইল মুছতে চান তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
$ find . -type f ! -name "*.txt" -exec rm -rf {} \;
তবে আপনি যদি ফাইলগুলির সাথে ডিরেক্টরিগুলিও মুছতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
$ find . ! -name "*.txt" -exec rm -r {} \;
আপনি ইনভার্টেড গ্রেপ এবং xargs ব্যবহার করতে পারেন
ls | grep -v .txt$| xargs rm
ls | grep -v *.txt | xargs rmঠিক পাশাপাশি কাজ করে
grep -v *.txtকেবল তখনই কাজ করবে যদি একটি .txtফাইল থাকে। যদি কিছুই না থাকে তবে প্যাটার্ন হিসাবে grepব্যবহার করবেন *.txt; যদি একের বেশি থাকে তবে এটি .txtআউটপুটটিকে অগ্রাহ্য করে অন্যান্য ফাইলগুলির মধ্যে প্রথম ফাইলের নাম অনুসন্ধান করবে ls। (সুনির্দিষ্ট ফলাফলগুলি শেলের
.txt$txtবিন্দু নির্বিশেষে স্ট্রিংগুলি শেষ হবে । কারণ grepপ্যারামিটার হিসাবে নিয়মিত ভাব প্রকাশ করে। সুতরাং ফাইল a.txtএবং aatxtএবং a-txtএই সব অভিব্যক্তি দ্বারা মেলানো করা হবে না। সঠিক মত প্রকাশ করা উচিত ls | grep -v \\.txt$ | xargs --no-run-if-empty rm। কৌতূহলী ব্যক্তিদের জন্য: আপনি যদি অভিব্যক্তিটি নিয়ে ঘুরে দেখতে চান তবে নিরাপদে এই পরীক্ষামূলক অভিব্যক্তিটি ব্যবহার করুন ls | grep \\.txt$ | xargs --no-run-if-empty echo(দ্রষ্টব্য: কোনও -vপতাকা নেই এবং নেই rm=>echo)। দ্রষ্টব্য 2: আপনি সম্ভবত ডাবল ব্যাকস্ল্যাশ লক্ষ্য করেছেন। একটি রেজেক্সের জন্য, অন্যটি স্ল্যাশ থেকে বাঁচার জন্য বাশের জন্য for
সহজভাবে করুন:
rm $(ls -I "*.txt" ) # .Txt ব্যতীত ফাইলের ধরন মুছে ফেলা হয়
একইভাবে, যদি "এক বা একাধিক ফাইল প্রকার বাদে" মুছতে হয়, তবে:
rm $(ls -I "*.txt" -I "*.pdf" ) # * টেক্সট এবং * .পিডিএফ বাদে ফাইলের ধরণগুলি ডিলিট করে
-Iবিকল্প উপযোগী হতে পারে, কিন্তু দেখতে কেন ম বিশ্লেষণ করা । এবং কী | xargsঅর্জন করে? কোনও যুক্তি ছাড়াই, এটি কেবল echoতার সমস্ত ইনপুটটিতে চলে।
xargsঅর্জন করার কথা?
এটি বর্ণিত একটি ( ) বাদে সমস্ত লুকানো (ডট) ফাইল এবং ফোল্ডারগুলি সরাতেও কাজ করে .mydir:
rm -rf $(ls -aI ".mydir")
lsবাস্তবে কল করার চেষ্টা করার আগে যেমন একটি নির্দোষ কমান্ড দিয়ে পরীক্ষা করুনrm।