Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी डायरेक्टरी ऑपरेशन्स मास्टर करें: लिस्टिंग, नेविगेटिंग, और फोल्डर बनाना

क्या आप जानते हैं कि आप रूबी के साथ अपने फाइल सिस्टम को नेविगेट कर सकते हैं?

रूबी "Dir" क्लास के साथ।

आप डायरेक्ट्री एंट्रीज सूचीबद्ध कर सकते हैं, अपनी वर्तमान डायरेक्टरी बदल सकते हैं और यहां तक कि नए फोल्डर भी बना सकते हैं!

यहां एक उदाहरण है:

 filenames = Dir.entries(".") 

यह entries मेथड फाइलनाम एंट्रीज की एक सरणी लौटाता है। हर एंट्री एक स्ट्रिंग है, इसलिए यदि आप वास्तव में इन फ़ाइलों को पढ़ना चाहते हैं तो आपको इसे रूबी File क्लास के साथ जोड़ना होगा।

बात दें, यह डॉट (.) वर्तमान डायरेक्टरी को दर्शाता है।

यह वह डायरेक्टरी होगी जहां से आपका कोड चल रहा है, न कि वह डायरेक्टरी जहां आप (अपने टर्मिनल में) कोड चलाते समय हैं।

इसके कारण...

Dir.pwd मेथड का उपयोग करके अपनी वर्तमान डायरेक्टरी जांचना उपयोगी हो सकता है।

अब:

आइए सीखें कि Dir क्लास का उपयोग करके नई डायरेक्टरीज़ कैसे बनाएं (mkdir), उनका नाम बदलें (mv), और उन फ़ाइल नामों को ढूंढें जो एक विशिष्ट पैटर्न का पालन करते हैं (glob)।

नई डायरेक्टरी बनाने के लिए रूबी के Mkdir मेथड का उपयोग करना

यदि आप रूबी के साथ एक नया फोल्डर बनाना चाहते हैं तो आप Dir.mkdir मेथड का उपयोग कर सकते हैं।

उदाहरण:

 Dir.mkdir("testing") 

यदि एक सापेक्ष पथ दिया जाता है, तो यह डायरेक्टरी वर्तमान पथ (Dir.pwd) के तहत बनाई जाती है।

आपको कुछ त्रुटियां मिल सकती हैं:

  • डायरेक्टरी पहले से मौजूद है (Errno::EEXIST)
  • अनुमति अस्वीकृत (Errno::EACCES)
  • आप किसी ऐसी डायरेक्टरी के तहत फोल्डर बनाने का प्रयास कर रहे हैं जो अभी तक मौजूद नहीं है (Errno::ENOENT)

आखिरी त्रुटि आमतौर पर तब होती है जब आप नेस्टेड डायरेक्टरीज़ बनाने का प्रयास कर रहे होते हैं।

या यदि आप एक निरपेक्ष पथ का उपयोग कर रहे हैं जो मौजूद नहीं है।

दो समाधान:

  • बनाने से पहले जांचें कि डायरेक्टरी मौजूद है या नहीं ( Dir.exists? के साथ)
  • अधिक उन्नत क्लास का उपयोग करें (अगला खंड)

सीखते रहें!

FileUtils मॉड्यूल के साथ उन्नत ऑपरेशन्स

यदि आपको थोड़ी अतिरिक्त शक्ति की आवश्यकता है तो आप मानक पुस्तकालय से FileUtils मॉड्यूल ला सकते हैं।

इसमें mkdir_p जैसे मेथड्स शामिल हैं जो एक चरण में नेस्टेड डायरेक्टरीज़ बनाते हैं।

यहां एक उदाहरण है:

 require 'fileutils' FileUtils.mkdir_p("/tmp/testing/a/b") 

बहुत बढ़िया, है ना?

यह सब नहीं है, FileUtils कीवर्ड आर्ग्युमेंट्स के रूप में सभी फ़ाइल ऑपरेशन्स के लिए अतिरिक्त विकल्प भी लाता है। जैसे verbose विकल्प (लिनक्स कमांड्स प्रिंट करता है) और noop (फ़ाइलें न बदलें) विकल्प।

इसे आज़माएं!

डायरेक्टरीज़ का नाम कैसे बदलें

रूबी आपको वह हर ऑपरेशन करने की अनुमति देता है जो आप अपने ऑपरेटिंग सिस्टम यूजर इंटरफेस से, या टर्मिनल से कर सकते हैं।

उदाहरण के लिए...

आप इस तरह एक डायरेक्टरी का नाम बदल सकते हैं:

 FileUtils.mv("/tmp/a", "/tmp/b") 

आपको यहां भी FileUtils का उपयोग करना होगा क्योंकि mv Dir क्लास पर उपलब्ध नहीं है।

अपनी वर्तमान डायरेक्टरी कैसे बदलें

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

आप ऐसा करने के लिए Dir.chdir मेथड का उपयोग कर सकते हैं।

उदाहरण:

 Dir.chdir("/tmp") { Dir.entries(".") } 

यह दो तरीकों से काम करता है:

  • ब्लॉक के साथ, वर्तमान डायरेक्टरी केवल ब्लॉक के अंदर के कोड के लिए बदलती है
  • ब्लॉक के बिना, यह मेथड कॉल के बाद सभी कोड के लिए बदलती है

ध्यान दें कि chdir केवल आपके रूबी प्रोसेस के भीतर काम करता है, यह "बाहरी दुनिया" को प्रभावित नहीं करता।

दूसरे शब्दों में...

आपके रूबी प्रोग्राम के रुकने के बाद यह आपके शेल की वर्किंग डायरेक्टरी को नहीं बदलेगा।

पैटर्न मिलान के साथ फ़ाइलों और डायरेक्टरीज़ को सूचीबद्ध करना

एक फ़ोल्डर में सभी रूबी फ़ाइलें ढूंढना चाहते हैं? glob मेथड के साथ आसान काम!

उदाहरण:

 Dir.glob("*.rb") 

आप कोई अन्य एक्सटेंशन उपयोग कर सकते हैं, जैसे ".txt", या ".yml"। या फ़ाइल नाम का हिस्सा कोई अन्य टेक्स्ट।

सभी फ़ोल्डर्स के अंदर फ़ाइलें ढूंढना चाहते हैं?

हाँ, यह संभव है:

 Dir.glob("**/*.rb") 

परिणाम सभी फ़ाइल नामों वाली एक सरणी है, जिसमें सापेक्ष पथ शामिल है। आप File.basename मेथड का उपयोग करके पथ को हटा सकते हैं और केवल फ़ाइल नाम प्राप्त कर सकते हैं, glob से प्राप्त सूची की हर फ़ाइल पर।

सारांश

आपने Dir और FileUtils क्लासेस का उपयोग करके रूबी में डायरेक्टरीज़ के साथ काम करना सीखा।

अब इसे अभ्यास में लाने की आपकी बारी है।

पढ़ने के लिए धन्यवाद! 🙂


  1. रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है

    रूबी का प्रदर्शन संस्करण दर संस्करण बहुत सुधर रहा है… और रूबी विकास टीम रूबी को और भी तेज़ बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 प्रोजेक्ट है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज़ होगा। इस प्रोजेक्ट का हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJIT समझाया गया

  1. - रूबी रेंज में महारत हासिल करें: निर्माण, उपयोग और अंतर्निहित तंत्र

    रूबी में रेंज क्या है और यह कैसे काम करती है? एक रेंज एक ऑब्जेक्ट है जिसमें एक प्रारंभिक मान और एक अंतिम मान होता है, ये उन दो मानों के बीच पूरे रेंज में फैले अनुक्रम बनाने में आपकी मदद करते हैं। आप 1 से 20 तक जा सकते हैं, या a से z तक। इस लेख में आप खोजेंगे: रूबी रेंज कैसे बनाएं रूबी में step और i

  1. रूबी पार्सिंग में मास्टर करें: स्क्रैच से अपना खुद का पार्सर बनाएं रूबी पार्सिंग में मास्टर करें: स्क्रैच से अपना खुद का पार्सर बनाएं

    पार्सिंग स्ट्रिंग्स के एक समूह को समझने और उन्हें किसी ऐसी चीज़ में बदलने की कला है जिसे हम समझ सकें। आप रेगुलर एक्सप्रेशन्स का उपयोग कर सकते हैं, लेकिन वे हमेशा इस काम के लिए उपयुक्त नहीं होते। उदाहरण के लिए, यह सामान्य ज्ञान है कि HTML को रेगुलर एक्सप्रेशन्स से पार्स करना शायद एक अच्छा विचार नहीं