আমি কীভাবে বর্তমান ডিরেক্টরিতে একটি নির্দিষ্ট এক্সটেনশনের সমস্ত ফাইল পুনরাবৃত্তভাবে মুছতে পারি?

আমি কীভাবে একটি নির্দিষ্ট এক্সটেনশন সহ সমস্ত ফাইল নিরাপদে মুছে ফেলব (উদাঃ .bak) বর্তমান ডিরেক্টরি এবং সমস্ত সাবফোল্ডার থেকে একটি কমান্ড লাইন ব্যবহার করে? সহজভাবে, আমি ব্যবহার করতে ভয় পাচ্ছি rm যেহেতু আমি এটি একবার ভুল ব্যবহার করেছি এবং এখন আমার পরামর্শ দরকার

এমনকি আপনি ব্যবহার করতে হবে না rm এই ক্ষেত্রে যদি আপনি ভয় পান ব্যবহার করুন find:

find . -name "*.bak" -type f -delete

কিন্তু সতর্কতা সঙ্গে এটি ব্যবহার করুন. প্রথম চালান:

find . -name "*.bak" -type f

আপনি মুছে ফেলা হবে, যা ফাইল ঠিক দেখতে.

এছাড়াও, নিশ্চিত করুন যে -delete শেষ যুক্তি তোমার আদেশে আপনি যদি এটি আগে রাখেন -name *.bak argument, এটা সবকিছু মুছে ফেলা হবে.

দেখা man find এবং man rm আরও তথ্যের জন্য এবং এসই সম্পর্কিত এই প্রশ্নটি দেখুন:

খুঁজুন . - নাম "*.বাক " - টাইপ এফ-প্রিন্ট0 | জারগস -0 / বিন/ আরএম-এফ
< / কোড> < / প্রাক >

প্রথমে কমান্ডটি চালান shopt -s globstar. আপনি কমান্ড লাইনে যে চালাতে পারেন, এবং এটি শুধুমাত্র যে শেল উইন্ডোতে প্রভাব থাকবে. আপনি এটি আপনার মধ্যে রাখতে পারেন .bashrc, এবং তারপর সব সদ্য শুরু শাঁস এটা নিতে হবে. যে কমান্ড প্রভাব করতে হয় **/ বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিতে ফাইলগুলি পুনরাবৃত্তভাবে মেলে (ডিফল্টরূপে, **/ হিসাবে একই জিনিস মানে */: শুধুমাত্র তাত্ক্ষণিক উপ-ডিরেক্টরিতে) তারপর:

rm **/*.bak

(অথবা gvfs-trash **/*.bak অথবা আপনি কি আছে).

ফাইল মুছে ফেলা আমার জন্য আপনার ব্যবহার করা উচিত এমন কিছু নয় rm জন্য. এখানে একটি বিকল্প:

sudo apt-get install gvfs     # install a tool that allows you to put stuff in the trashalias "trash"="gvfs-trash"    # you can also put this in .bash_aliases or simply use the command without aliastrash *.bak                   # trash the files (thus moving them to the trash bin)

যেমন ফ্লিম মন্তব্যে বলে:

প্যাকেজ trash-cli হিসাবে একই জিনিস আছে gvfs-trash জিভিএফএসের উপর নির্ভরতা ছাড়াই

সুতরাং:

sudo apt-get install trash-cli

আপনি এই জন্য একটি উপনাম করতে হবে না, কারণ trash-cli প্যাকেজ একটি কমান্ড প্রদান করে trash, যা আমরা যা চাই তা করে.

ইলিয়া কাগান যেমন বিস্তৃত মন্তব্যে পরিষ্কার করেছেন, আপনি এটি ব্যবহার করে পুনরাবৃত্তি করতে পারেন find. সেক্ষেত্রে আপনি কোনও উপনাম ব্যবহার করতে পারবেন না, সুতরাং নীচের কমান্ডগুলি ধরে নেয় যে আপনি ইনস্টল করেছেন trash-cli. ইলিয়াসের মন্তব্য:

এই কমান্ডটি সমস্ত সন্ধান করে এবং প্রদর্শন করে .bak ফাইল এবং সিমলিঙ্কগুলি বর্তমান ডিরেক্টরি বা এর সাব-ডিরেক্টরিতে বা নীচে কোথাও

find . -name '*.bak' -xtype f

এগুলি মুছতে, একটি -exec সঙ্গে trash কমান্ড:

find . -name '*.bak' -xtype f -exec trash {} +

-xtype f ফাইল ফাইল এবং সিমলিংক নির্বাচন, কিন্তু না ফোল্ডার. মুছে ফেলার জন্য .বাক ফোল্ডারগুলিও, সেই অংশটি সরান এবং ব্যবহার করুন -execdir, যা এড়ানো হয় cannot trash non-existent এর জন্য ত্রুটি .bak ভিতরে ফাইল .bak ডিরেক্টরি:

find . -name '*.bak' -execdir trash {} +

আপনি যদি কোনও নির্দিষ্ট ধরণের সমস্ত ফাইল মুছতে চান তবে বর্তমান ফোল্ডার থেকে কেবল 1 টি ফোল্ডার "গভীর" :

find . -maxdepth 2 -name "*.log" -type f -delete

- ম্যাক্সডেপথ 2 কারণ বর্তমান ডিরেক্টরি"."প্রথম ফোল্ডার হিসাবে গণ্য.

দ্রুত উত্তর:

  • বিবেচিত নাম বা পোস্টফিক্স পুনরাবৃত্তভাবে সমস্ত ফাইল মুছুন:

    find . -name '*.pyc' -type f -delete

  • পুনরাবৃত্তভাবে বিবেচিত নামের সাথে সমস্ত ডিরেক্টরি মুছুন:

    find ~ -path '*/__pycache__/*' -delete‍‍‍find ~ -type d -name '__pycache__' -empty -delete‍‍‍

    কিছুটা কম শক্তভাবে নিয়ন্ত্রিত, তবে একক লাইনে:

    find ~ -path '*/__pycache__*' -delete

[নোট]:

d ডিরেক্টরি বিকল্প এবং f ফাইল বিকল্প.

আপনি ব্যবহার করার আগে প্রথমে সেই এক্সটেনশন সহ সমস্ত ফাইল তালিকাভুক্ত করতে পারেন rmউদাহরণ স্বরূপ,

ls *.bak

আপনি মুছে ফেলতে চান যে শুধুমাত্র ফাইল পেতে, তাহলে আপনি ব্যবহার করতে পারেন rm

rm *.bak

যদি আপনি ফাইলগুলি মুছে ফেলার আগে তালিকাটি পরীক্ষা করতে চান তবে আপনি এটি প্রতিধ্বনি করতে পারেন

find . -name "*.bak" -type f | xargs echo rm -rf

এটি অনুসন্ধানের ফলাফলগুলি তালিকাভুক্ত করবে যা জারগসের মাধ্যমে আরএম কমান্ডে পাইপ করা হয়একবার আপনি তালিকা সম্পর্কে নিশ্চিত আপনি উপরের কমান্ড ইকো ড্রপ করতে পারেন.

find . -name "*.bak" -type f | xargs rm -rf

সম্পর্কিত পোস্ট - [আমি কীভাবে ওয়াইল্ডকার্ডের সাথে ডিরেক্টরিগুলি পুনরাবৃত্তি করব?] (rm - How do I recursively delete directories with wildcard? - Unix & Linux Stack Exchange)