উত্তর:
আপনি ব্যবহার করতে পারেন 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
।