मैं वर्तमान निर्देशिका में किसी विशिष्ट एक्सटेंशन की सभी फ़ाइलों को कैसे हटा सकता हूं?

मैं एक विशिष्ट एक्सटेंशन (जैसे) के साथ सभी फ़ाइलों को सुरक्षित रूप से कैसे हटा सकता हूं .bak) वर्तमान निर्देशिका और सभी सबफ़ोल्डर से एक कमांड-लाइन का उपयोग कर? बस, मैं उपयोग करने से डरता हूं rm चूंकि मैंने इसे एक बार गलत इस्तेमाल किया था और अब मुझे सलाह की जरूरत है ।

आपको उपयोग करने की भी आवश्यकता नहीं है rm इस मामले में अगर आप डरते हैं । उपयोग करें find:

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

लेकिन एहतियात के साथ इसका इस्तेमाल करें । पहले भागो:

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

यह देखने के लिए कि आप कौन सी फाइलें निकालेंगे ।

इसके अलावा, सुनिश्चित करें कि -delete अंतिम तर्क है आपके आदेश में । यदि आप इसे पहले डालते हैं -name *.bak argument, यह सब कुछ हटा देगा.

देखें man find और man rm अधिक जानकारी के लिए और एसई पर यह संबंधित प्रश्न भी देखें:

< पूर्व> < कोड > खोजें । - नाम" *।bak" -प्रकार f -print0 | xargs -0 /बिन/आर एम-f

पहले कमांड चलाएं 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 बिना निर्भरता पर gvfs.

तो:

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

संबंधित पोस्ट- मैं वाइल्डकार्ड के साथ निर्देशिकाओं को कैसे हटा सकता हूं?