2010-09-10 16 views
87

मैं एक फ़ाइल को /a/b/c/d.txt के रूप में स्टोर करना चाहता हूं, लेकिन मुझे नहीं पता कि इनमें से कोई भी निर्देशिका मौजूद है या यदि आवश्यक हो तो उन्हें फिर से बनाने की आवश्यकता है। रूबी में यह कैसे कर सकता है?रूबी में रिकर्सिवली निर्देशिका कैसे बनाएं?

उत्तर

164

उपयोग mkdir_p:

FileUtils.mkdir_p '/a/b/c' 

_p माता-पिता/पथ के लिए एक यूनिक्स पकड़ मिली थी तुम भी उर्फ ​​mkpath उपयोग कर सकते हैं कि आप के लिए और अधिक समझ में आता है है।

FileUtils.mkpath '/a/b/c' 

रूबी में 1.9 FileUtils कोर से हटा दिया गया था, ताकि आप require 'fileutils' करना होगा।

+9

+1। रूबी शेल स्क्रिप्टिंग के लिए * फ़ाइल उपयोग 'और' पथनाम 'शायद * सबसे महत्वपूर्ण उपकरण हैं। –

3
require 'ftools' 

File.makedirs

+1

पॉइंटर के लिए धन्यवाद! दस्तावेज़ FileUtils.mkdir_p पसंद करते हैं, इसलिए मैंने इसे लिया ... – Jan

7

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

`mkdir -p /a/b/c` 
+1

एक फ़ंक्शन के लिए कमांडलाइन देना जो आप किसी अंतर्निहित फ़ंक्शन के साथ कर सकते हैं वह अच्छा नहीं है –

+0

हालांकि इतना सकारात्मक होना है। –

16

उपयोगकर्ता mkdir_p अपने खुद के तर्क रिकर्सिवली

path = "/tmp/a/b/c" 

FileUtils.mkdir_p(path) unless File.exists?(path) 
0

तुम भी इस्तेमाल कर सकते हैं निर्देशिका बनाने में

def self.create_dir_if_not_exists(path) 
    recursive = path.split('/') 
    directory = '' 
    recursive.each do |sub_directory| 
    directory += sub_directory + '/' 
    Dir.mkdir(directory) unless (File.directory? directory) 
    end 
end 

तो अगर पथ 'tmp/a/b/ग' अगर 'है tmp 'मौजूद नहीं है' tmp 'बन जाता है, फिर' tmp/a/'और इतने पर और आगे।

संबंधित मुद्दे