রুবিতে পুনরাবৃত্তভাবে ডিরেক্টরি কীভাবে তৈরি করবেন?


101

আমি একটি ফাইল /a/b/c/d.txt হিসাবে সংরক্ষণ করতে চাই, তবে আমি জানি না যে এই ডিরেক্টরিগুলির কোনও উপস্থিত রয়েছে কিনা এবং প্রয়োজনে পুনরাবৃত্তভাবে এগুলি তৈরি করা দরকার। রুবিতে কেউ কীভাবে এটি করতে পারে?

উত্তর:


197

ব্যবহার mkdir_p:

FileUtils.mkdir_p '/a/b/c'

_pপিতা বা মাতা / পথ আপনার কাছে ওরফে ব্যবহার করতে পারেন জন্য একটি UNIX holdover হয় mkpathযদি আপনার জন্য আরো জ্ঞান করে তোলে।

FileUtils.mkpath '/a/b/c'

রুবিতে 1.9 ফাইলUtils মূল থেকে সরানো হয়েছে, তাই আপনাকে করতে হবে require 'fileutils'


9
+1 টি। FileUtilsএবং Pathnameসম্ভবত আছে রুবি শেল স্ক্রিপ্টিং জন্য সবচেয়ে গুরুত্বপূর্ণ সরঞ্জাম।
Jörg ডব্লু মিট্টাগ

21

পুনরাবৃত্তভাবে ডিরেক্টরি তৈরি করতে mkdir_p ব্যবহার করুন

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

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

5

আপনি যদি ইউনিক্স মেশিনে চলমান থাকেন তবে ভুলে যাবেন না আপনি সর্বদা ব্যাকটিক্সে রেখে রুবির নীচে শেল কমান্ড চালাতে পারেন।

`mkdir -p /a/b/c`

যদিও তাই ইতিবাচক হচ্ছে।
ম্যাথু শিনকেল

1
উপ-প্রক্রিয়াতে সিস্টেম কমান্ড পপিং সেরা ধারণা নয়। ত্রুটি পরিচালনা, ফলাফল পরীক্ষা করা ইত্যাদি রুবি স্ট্যান্ডার্ড লাইব্রেরি সহ এটি করা ভাল
নরজ

3
 require 'ftools'

File.makedirs


1
পয়েন্টারের জন্য ধন্যবাদ! দস্তাবেজগুলি ফাইলUtils.mkdir_p পছন্দ করে বলে মনে হচ্ছে, তাই আমি এটি নিয়েছিলাম ...
জানুয়ারী

এটি কেবলমাত্র একটি নাম mkdir_pএবং mkpath রুবি-
ডক.অর্গ.আর.এস.ডি.লি.বি.

2

উদ্ধারের পথে পথ !

Pathname('/a/b/c/d.txt').dirname.mkpath

এটি গৃহীত উত্তরের চেয়ে স্বজ্ঞাত। এছাড়াও পদ্ধতিটির জন্য ডকটি ফাইল
লিবিডোক

প্রশ্নটি হ'ল: "আমি কোনও ফাইল /a/b/c/d.txt হিসাবে সংরক্ষণ করতে চাই, তবে এই ডিরেক্টরিগুলির কোনও উপস্থিত রয়েছে কিনা তা আমি জানি না"। আমার সমাধানটি বিদ্যমান ফাইল পাথ ('/a/b/c/d.txt') ব্যবহার করার অনুমতি দেয় এবং পৃথক পার্সিং ছাড়াই সমস্ত ফোল্ডার তৈরি করে।
ভাদিয়াম তায়মিরভ

আপনার অর্থ কি একই সময়ে FileUtils.mkdir_p '/a/b/c'+ তৈরি করার অনুমতি দেয় d.txt?
noraj

নাহ, পরিবর্তে এটি অনুমতি দেয় Pathname('/a/b/c/d.txt').dirname.mkpathএবং File.write('/a/b/c/d.txt', content)ছাড়াই filename = '/a/b/c/d.txt'.rpartition('/').lastএবং বাকী বিশ্লেষণের জন্য
ভডিয়াম তায়মিরভ

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 / c' হয় তবে 'tmp' উপস্থিত না থাকলে 'tmp' তৈরি হয়, তারপরে 'tmp / a /' এবং আরও অনেক কিছু।


কেউ চাকা পুনরায় উদ্ভাবন এড়াতে হবে।
noraj
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.