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


531

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

উত্তর:


840

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

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

তবে সাবধানতা সহ এটি ব্যবহার করুন। প্রথমে রান করুন:

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

ঠিক কোন ফাইলগুলি আপনি সরিয়ে ফেলবেন তা দেখতে।

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

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


এর থেকে আলাদা কীভাবে rm *.bak?
sayantankhan

10
@ বল্ট 64 আপনার উপ- rm *.bakডিরেক্টরিতে কাজ করবে না।
রাদু রেদেনু

ডিফল্ট সেটিংস সহ rm *.bakকেবল বর্তমান ডিরেক্টরিতে .bak দিয়ে শেষ হওয়া সমস্ত ফাইল মুছবে। উপ-ডিরেক্টরিগুলিতেও আপনাকে কাজ করতে গ্লোবগুলির সাথে ঝাঁকুনির প্রয়োজন ছিল, -r বিকল্পটি ব্যবহার করুন বা সন্ধানের উদাহরণটি ব্যবহার করুন।
হেনেস

9
@ হেনেস সাবধান rm -r *.bak! এটি .bakতাদের সমস্ত সামগ্রী সহ শেষ হওয়া ডিরেক্টরিগুলি সরিয়ে দেয় ।
রাদু রেডানু

37
নিশ্চিত করুন যে -deleteআপনার আদেশ গত যুক্তি। আপনি যদি -name *.bakযুক্তিটির সামনে রাখেন তবে এটি সবকিছু মুছে ফেলবে।
মাইকেল

40
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f

1
জিজ্ঞাসুবুন্টু স্বাগতম! যদিও এটি পুরোপুরি বৈধ উত্তর হলেও আমি মনে করি না যে -deleteএটির পতাকাটির পরিবর্তে এটি ব্যবহারের কোনও সুবিধা নেই find। আরও তথ্য সন্ধানের সাথে ফাইল মুছে ফেলার জন্য জিএনইউ ম্যানুয়ালগুলিতে এন্ট্রি পাওয়া যাবে ।
গ্লুটোনিমেট

2
আপনি সম্ভবত সঠিক, এটি কেবলমাত্র একটি বিকল্প সমাধান, সম্ভবত আরও কাঁচা)
লকারগুলি

11
এটি কেবল বিকল্প নয়, পাইপ '|' এর সাথে কীভাবে অন্যান্য কমান্ডগুলি একত্রিত করা যায় তার একটি উদাহরণ। +1
বোরিস পাভলোভিć

13
এই বিকল্প সমাধানগুলি এমন অন্যান্য পরিবেশে কাজ করে যা অভাব-বিহীন (সাইগউইনের মতো)
সিরিয়ার্ট

2
আমি মনে করি এটি এখানে সেরা উত্তর।
লিও লোপোল্ড হার্টজ 준영

33

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

rm **/*.bak

(বা আপনার gvfs-trash **/*.bakকী আছে)


21

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

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

ফ্লিম মন্তব্য হিসাবে বলেছেন:

প্যাকেজটি জিভিএফএসের উপর নির্ভরশীলতা ছাড়াই trash-cliএকই কাজ gvfs-trashকরে।

তাই:

sudo apt-get install trash-cli

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

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

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

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

এগুলি মুছতে, আদেশটি -execসহ একটি যুক্ত করুন trash:

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

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

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

4
" rmজিনিস মুছতে ব্যবহার করবেন না " এটি একটি বিতর্কিত বক্তব্য তবে আমার একমত হতে হবে যে এমন কিছু ব্যবহার করা প্রায়শই বুদ্ধিমানের কাজ যা আপনাকে জিনিসগুলি পূর্বাবস্থায় ফেরাতে দেয়।
অলি

2
প্যাকেজ নির্ভরতা ছাড়াই trash-cliএকই কাজ gvfs-trashকরে gvfs
ফ্লিম

আমি উত্তরে এটি সম্পাদনা করেছি, পরবর্তী সময় সম্পাদনাটি নিজে নির্দ্বিধায় করুন।
don.joey

@ don.joey এই উত্তরটি মুছে ফেলা বলে find . -name "*.bak" -type fপ্রদর্শন করে বলে মনে হচ্ছে trash *.bakআসলেই কি আপনি বলতে চাইছেন? আপনি ডিরেক্টরিগুলি ট্র্যাশের সাথে trashবা ট্র্যাসে সরাতে পারেন gvfs-trashতবে trash *.bakকেবলমাত্র সেই ফাইল এবং ডিরেক্টরিগুলি সরিয়ে ফেলবেন যার নামগুলি শেষ হয় .bakএবং এটি বর্তমান ডিরেক্টরিতে অবিলম্বে থাকে। শেলটি প্রসারিত হয় *.bak, সুতরাং নিজের নাম নয় এমন উপ-ডিরেক্টরিগুলিতে ফাইলগুলিকে trash *.bakপ্রভাবিত করবে না । .bak.bak
এলিয়াহ

1
@ don.joey হ্যাঁ ls *.bak(যা আমি আপনাকে বোঝাতে চাইছি) কী trash *.bakট্র্যাশগুলির তালিকাবদ্ধ করে । নীচে যে কোনও জায়গায় find . -name '*.bak' -xtype f -exec trash {} +সমস্ত .bakফাইল ট্র্যাশ করে .। এটি কোনও উপনাম ব্যবহার করতে পারে না, সুতরাং পরিবর্তে ইনস্টল করুন trash-cliবা লিখুন gvfs-trashএখানে একটি উদাহরণ। -xtype fফাইলগুলিতে ফাইল এবং সিমলিংক নির্বাচন করে তবে ফোল্ডারগুলি নয়। .bak ফোল্ডারগুলিও মুছতে , ব্যবহার করুন find . -name '*.bak' -execdir trash {} +, যা ডিরেক্টরিগুলির ভিতরে থাকা ফাইলগুলির cannot trash non existentজন্য ত্রুটি এড়ায় । আপনার উত্তরে দয়া করে বিনা দ্বিধায় ব্যবহার করুন। .bak.bak
এলিয়াহ

5

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

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

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


1

দ্রুত উত্তর:

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

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

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

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

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

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

[ দ্রষ্টব্য ]:

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


0

আপনি যদি গিট রেপোর ভিতরে থাকেন তবে আপনি এটি ব্যবহার করতে পারেন:

git clean -fdx

এটি .gitignore এ থাকা তালিকাহীন ফাইল এবং ফাইলগুলি মুছে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.