আপনি কি জানেন যে আপনি রুবি দিয়ে আপনার ফাইল সিস্টেম নেভিগেট করতে পারেন?
রুবি "দির" ক্লাসের সাথে।
আপনি ডিরেক্টরি এন্ট্রি তালিকাভুক্ত করতে পারেন, আপনার বর্তমান ডিরেক্টরি পরিবর্তন করতে পারেন এবং এমনকি নতুন ফোল্ডার তৈরি করতে পারেন!
এখানে একটি উদাহরণ আছে :
filenames = Dir.entries(".")
এই entries
পদ্ধতি ফাইলের নাম এন্ট্রির একটি অ্যারে প্রদান করে। প্রতিটি এন্ট্রি একটি স্ট্রিং, তাই আপনি যদি এই ফাইলগুলি সত্যিই পড়তে চান তবে আপনাকে রুবি ফাইল ক্লাসের সাথে এটি একত্রিত করতে হবে৷
Btw, এই বিন্দু (.
) বর্তমান ডিরেক্টরি প্রতিনিধিত্ব করে .
কোডটি চালানোর সময় আপনি যে ডিরেক্টরিটি (আপনার টার্মিনালে) থাকেন সেটি নয়।
তার কারণে…
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
ক্লাস।
এখন এটিকে বাস্তবে প্রয়োগ করার পালা আপনার।
পড়ার জন্য ধন্যবাদ! 🙂