मैं एक विशिष्ट एक्सटेंशन (जैसे) के साथ सभी फ़ाइलों को सुरक्षित रूप से कैसे हटा सकता हूं .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__/*' -deletefind ~ -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