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


36

यदि मैं cdकुछ विशेष निर्देशिका में वर्तमान / कार्यशील निर्देशिका (इसका उपयोग करते हुए नेविगेट करता हूं) सेट करता हूं और फिर टाइप करता हूं :

rm *.xvg

यह आज्ञा क्या करेगी? क्या यह सच है कि उपरोक्त कमांड केवल एक्सटेंशन वाली फाइलों को .xvg केवल कार्यशील निर्देशिका में हटा देगा ?

मैं पूछने से पहले इस बारे में कोशिश करने से घबरा गया था, क्योंकि मैं पूरी तरह से सुनिश्चित होना चाहता हूं कि उपरोक्त कमांड केवल .xvgफाइलों को हटाए जाने वाले कार्य को हटा देगा ।

जवाबों:


34

हां, केवल आपकी वर्तमान निर्देशिका में निर्दिष्ट एक्सटेंशन वाली फ़ाइलों को हटा rm *.xvgदेगा ।

यह सुनिश्चित करने का एक अच्छा तरीका है कि आप वास्तव में उस निर्देशिका में हैं जिसे आप अपनी फ़ाइलों को हटाना चाहते हैं, pwdकमांड का उपयोग करने के लिए है जो आपकी वर्तमान निर्देशिका को प्रदर्शित करेगा और फिर lsसत्यापित करने के लिए आपको उन फ़ाइलों को ढूंढना होगा जिनकी आप अपेक्षा कर रहे हैं।

यदि आप rmकमांड जारी करने के बारे में थोड़ा आशंकित हैं , तो 2 चीजें हैं जो आप कर सकते हैं:

  1. ls *.xvgइस कमांड से कौन सी फाइलें प्रभावित होंगी, इसकी सूची देखने के लिए टाइप करें।

  2. जब तक आपके पास बहुत सारी फाइलें न हों, आप हमेशा के लिए -iकमांड लाइन स्विच का भी उपयोग कर सकते हैं rm(इसके लिए भी मौजूद है cpऔर mv)। rm -i *.xvgयदि आप इसे हटाना ठीक था, तो प्रत्येक व्यक्तिगत फ़ाइल के लिए उपयोग करना आपको प्रेरित करेगा, इसलिए आप यह सुनिश्चित कर सकते हैं कि जिस चीज़ की आपको उम्मीद नहीं थी वह नष्ट हो रही है। (यह थकाऊ होगा, अगर आपके पास बहुत सारी फाइलें हैं हालांकि :)


1
इसके अलावा: rm -f {*.xvg,.*.xvg}छिपी हुई फ़ाइलों को भी हटाने के लिए। और rm -R -f {*.xvg,.*.xvg}डायरेक्ट्रीज को भी हटाना है।
डोर

20

आपको डायर पर जाने की जरूरत नहीं है, बस उपयोग करें

rm /some/dir/*.xvg 

मामले में आपके पास एक टाइपो या समान गलती है, जहां / som / dir मौजूद नहीं है:

cd /som/dir
rm *.xvg

वर्तमान dir में सभी .xvg-files को गलती से हटा देगा। पहला आदेश नहीं होगा, और आपको फिर से सीडी वापस करने की आवश्यकता नहीं है।

एक वैकल्पिक तरीका खोज का उपयोग करना होगा:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

/ कुछ / dir / -maxdepth 1 -type f -name "* .xvg" -delete मेरे लिए काम करते हैं! उप-निर्देशिका में मेल खाने वाली फाइलों को हटाने के लिए -maxdepth "n" का उपयोग करें यदि पथ दिया गया हो
विनय

3

हां, rm *.xvgकेवल .xvgआपकी वर्तमान निर्देशिका में समाप्त होने वाली फ़ाइलों को हटा देगा । यहाँ पर क्यों।

जब आप इस तरह का कमांड टाइप करते हैं, तो आपके द्वारा उपयोग किए जा रहे शेल (लेट्स बैश) और कमांड बाइनरी के बीच काम विभाजित हो जाता है।

आप टाइप करके बाइनरी का पता लगा सकते हैं which rm। यह छोटा सा प्रोग्राम अनलिंकिंग फाइलों का ध्यान रखता है। इस तरह के कार्यक्रम कमांड लाइन से शुरू किए जा सकते हैं और prog arg1 arg2 arg3जब वे शुरू होते हैं तो तर्कों की एक सूची पढ़ सकते हैं । के मामले में rm, उन्हें हटाए जाने के लिए पूरी तरह से योग्य फ़ाइलनाम की सूची के रूप में व्याख्या की जाती है। इसलिए यदि आप फ़ाइल युक्त निर्देशिका में हैं foo.bar, तो टाइपिंग delete 'foo.*'में परिणाम होगा rm: foo.*: No such file or directory। फ़ाइल पैटर्न के आसपास सिंगल कोट्स पर ध्यान दें, वे शेल को तर्क को पास करने के लिए बताते हैं जैसा कि यह है।

हालाँकि अगर आप टाइप करते हैं rm *.bar उसी निर्देशिका में , तो यह फ़ाइल को हटा देगा। यहाँ क्या हो रहा है कि आपका शेल, जो प्रोग्राम है जिसे आप कमांड्स में टाइप करने के लिए उपयोग कर रहे हैं, कमांड पर आर्ग्युमेंट्स पास करने से पहले कुछ ट्रांसफॉर्मेशन कर रहा है। इनमें से एक को 'फ़ाइल नाम विस्तार' कहा जाता है, अन्यथा 'ग्लोबिंग' के रूप में जाना जाता है। आप यहाँ bash फ़ाइल नाम विस्तार की एक सूची देख सकते हैं । सबसे आम विस्तार में से एक है *, जिसे मौजूदा निर्देशिका में फ़ाइलनाम तक विस्तारित किया गया है।

ग्लब्स को काम पर देखने का एक सरल तरीका उपयोग करना है echo, जो शेल के माध्यम से पारित सभी तर्कों को वापस प्रिंट करता है। तो echo *उसी डायरेक्टरी में टाइप करने से आउटपुट मिलेगाfoo.bar । इसलिए जब आप टाइप करते हैं rm *.bar, तो वास्तव में क्या हो रहा है कि शेल तर्क सूची को विस्तारित करता है foo.bar, फिर उस rmकमांड को पास करता है ।

ग्लोबिंग को नियंत्रित करने के कुछ तरीके हैं। उदाहरण के लिए, हाल के संस्करणों में, आप ग्लोबस्टार नामक एक विकल्प को चालू कर सकते हैं जो पुनरावर्ती विस्तार करेगा। टाइपिंग सभी सबफ़ोल्डर्स में echo **/*.barसमाप्त होने वाली सभी फ़ाइलों की एक सूची दिखाएगी .bar। तो rm **/*.barग्लोबस्टार सक्षम बैश में टाइप करने से सबफ़ोल्डर में सभी मिलान फ़ाइलों को वास्तव में पुन: प्राप्त हो जाएगा।


1

आदेश:

  rm ./*.pgm

मेरे लिये कार्य करता है

कमान:

rm *.pgm

त्रुटि आदेश देता है (पोलिश में, अनुवादित):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

में

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.