क्या आप जानते हैं कि आप रूबी के साथ अपने फाइल सिस्टम को नेविगेट कर सकते हैं?
रूबी "Dir" क्लास के साथ।
आप निर्देशिका प्रविष्टियों को सूचीबद्ध कर सकते हैं, अपनी वर्तमान निर्देशिका बदल सकते हैं और यहां तक कि नए फ़ोल्डर भी बना सकते हैं!
यहां एक उदाहरण दिया गया है :
filenames = Dir.entries(".")
यह entries
विधि फ़ाइल नाम प्रविष्टियों की एक सरणी देता है। प्रत्येक प्रविष्टि एक स्ट्रिंग है, इसलिए यदि आप वास्तव में इन फ़ाइलों को पढ़ना चाहते हैं, तो आपको इसे रूबी फ़ाइल वर्ग के साथ संयोजित करना होगा।
बीटीडब्ल्यू, यह बिंदु (.
) वर्तमान निर्देशिका . का प्रतिनिधित्व करता है ।
यह वह निर्देशिका होगी जिससे आपका कोड चल रहा है, न कि वह निर्देशिका जो आप (अपने टर्मिनल में) कोड चलाते समय हैं।
उसके कारण…
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
कक्षाएं।
अब इसे व्यवहार में लाने की आपकी बारी है।
पढ़ने के लिए धन्यवाद!