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


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


421
2017-11-15 13:03


मूल




जवाब:


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

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

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

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

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

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

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


660
2017-11-15 13:08



यह कैसे अलग है rm *.bak? - sayantankhan
@ बोल्ट 64 आपका rm *.bak उपनिर्देशिका के लिए काम नहीं करेगा। - Radu Rădeanu
डिफ़ॉल्ट सेटिंग्स के साथ rm *.bak वर्तमान निर्देशिका में .bak के साथ समाप्त होने वाली सभी फ़ाइलों को केवल हटा देगा। उपनिर्देशिकाओं में चीजें भी करने के लिए आपको या तो ग्लोब के साथ परेशान करने की आवश्यकता होती है, -r विकल्प का उपयोग करें या उदाहरण उदाहरण का उपयोग करें। - Hennes
@ हेनेस सावधान रहें rm -r *.bak! यह निर्देशिका समाप्त करने वाली निर्देशिका भी हटा देता है .bak उनकी सभी सामग्री के साथ। - Radu Rădeanu
सुनिश्चित करो उस -delete आपके आदेश में अंतिम तर्क है। यदि आप इसे पहले रख देते हैं -name *.bak तर्क, यह सबकुछ हटा देगा। - Michael


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

32
2018-04-04 19:10



Askubuntu में आपका स्वागत है! हालांकि यह एक पूरी तरह से वैध जवाब है, मुझे नहीं लगता कि इसके बजाय इसका उपयोग करने में कोई फायदा है -delete का झंडा find। अधिक जानकारी में पाया जा सकता है खोजने के साथ फाइलों को हटाने के लिए जीएनयू मैनुअल प्रविष्टि। - Glutanimate
आप शायद सही हैं, यह सिर्फ एक वैकल्पिक समाधान है, शायद अधिक कच्चे;) - lokers
यह सिर्फ एक विकल्प नहीं है बल्कि एक उदाहरण है कि अन्य आदेशों को पाइप '|' के साथ कैसे जोड़ा जा सकता है। +1 - Boris Pavlović
यह वैकल्पिक समाधान उन अन्य वातावरणों पर काम करते हैं जिनमें कमी-रहित (जैसे सिगविन) - ciriarte
मुझे लगता है कि यह सबसे अच्छा जवाब है। - Léo Léopold Hertz 준영


पहले कमांड चलाएं shopt -s globstar। आप इसे कमांड लाइन पर चला सकते हैं, और यह केवल उस शेल विंडो में ही प्रभावी होगा। आप इसे अपने अंदर डाल सकते हैं .bashrc, और फिर सभी नए शुरुआती गोले इसे उठाएंगे। उस आदेश का प्रभाव बनाना है **/ मौजूदा निर्देशिका में इसकी फाइलें और इसके उपनिर्देशिकाओं को दोबारा मिलान करें (डिफ़ॉल्ट रूप से, **/ जैसा कि वही बात है */: केवल तत्काल उपनिर्देशिका में)। फिर:

rm **/*.bak

(या gvfs-trash **/*.bak या आप क्या है)।


28
2017-11-15 18:59





फाइलों को हटाना मेरे लिए कुछ नहीं है जिसका आप उपयोग करना चाहिए 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 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 फाइलों और फ़ाइलों को सिमलिंक का चयन करता है, लेकिन फ़ोल्डर नहीं। .Bak फ़ोल्डरों को भी हटाने के लिए, उस भाग को हटाएं, और उपयोग करें -execdir, जो से बचाता है cannot trash non-existent के लिए त्रुटियां .bak अंदर फाइलें .bak निर्देशिका:

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

19
2017-11-15 13:52



"प्रयोग न करें rm चीजों को हटाने के लिए "एक विवादास्पद बयान है, लेकिन मुझे इस बात से सहमत होना है कि अक्सर ऐसी चीज का उपयोग करना बुद्धिमान होता है जो आपको चीजों को पूर्ववत करने देता है। - Oli♦
पैकेज trash-cli वही काम करता है gvfs-trash पर निर्भरता के बिना gvfs। - Flimm
मैंने इसे जवाब में संपादित किया है, अगली बार खुद को संपादित करने के लिए स्वतंत्र महसूस करें। - don.joey
@ don.joey यह जवाब कहता है find . -name "*.bak" -type f क्या दिखाता है trash *.bak हटा देता है। क्या वाकई आपका क्या मतलब है? आप निर्देशिका को ट्रैश में ले जा सकते हैं trash या gvfs-trash, परंतु trash *.bak केवल उन फ़ाइलों और निर्देशिकाओं को स्थानांतरित करेगा जिनके नाम समाप्त होते हैं .bak और वह वर्तमान निर्देशिका में तुरंत रहता है। खोल फैलता है *.bak, इसलिए trash *.bak प्रभावित नहीं होगा .bak उपनिर्देशिका में फाइलें स्वयं नामित नहीं हैं .bak। - Eliah Kagan
@ 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 निर्देशिका। कृपया अपने उत्तर में इनमें से किसी का भी उपयोग करने में संकोच न करें। - Eliah Kagan


यदि आप किसी निश्चित प्रकार की सभी फ़ाइलों को हटाना चाहते हैं, लेकिन वर्तमान फ़ोल्डर से केवल 1 फ़ोल्डर "गहरा" है:

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

-मैक्सडेपथ 2 क्योंकि वर्तमान निर्देशिका ""पहले फ़ोल्डर के रूप में गिना जाता है।


3
2017-11-26 17:21





यदि आप एक गिट रेपो के अंदर हैं, तो आप इसका उपयोग कर सकते हैं:

git clean -fdx

यह .gitignore में अनचाहे फ़ाइलों और फ़ाइलों को हटा देता है।


0
2017-08-09 07:38