a*
এবং *a*
বাক্য গঠন শেল দ্বারা বাস্তবায়িত হয়, দ্বারা নয় ls
কমান্ড।
আপনি যখন টাইপ করুন
ls a*
আপনার শেল প্রম্পটে, শেলটি a*
বর্তমান ডিরেক্টরিতে বিদ্যমান সমস্ত ফাইলের তালিকায় প্রসারিত হয় যার নাম দিয়ে শুরু হয় a
। উদাহরণস্বরূপ, এটি a*
ক্রম প্রসারিত হতে পারে a1 a2 a3
এবং সেগুলিকে যুক্তি হিসাবে পাস করবে ls
। ls
কমান্ড নিজেই কখনো দেখেনি *
চরিত্র; এটা মাত্র তিন আর্গুমেন্ট দেখেন a1
, a2
আর a3
।
ওয়াইল্ডকার্ড সম্প্রসারণের উদ্দেশ্যে, "ফাইলগুলি" বর্তমান ডিরেক্টরিতে সমস্ত সত্ত্বাকে বোঝায়। উদাহরণস্বরূপ, a1
একটি সাধারণ ফাইল a2
হতে পারে, একটি ডিরেক্টরি a3
হতে পারে এবং একটি সিমিলিংক হতে পারে। তাদের সকলের ডিরেক্টরি এন্ট্রি রয়েছে এবং শেলটির ওয়াইল্ডকার্ড সম্প্রসারণের ক্ষেত্রে এন্ট্রিগুলি কী ধরণের সত্তা উল্লেখ করে তা বিবেচনা করে না।
কার্যত সমস্ত শেল আপনি সম্ভবত চালিয়ে যাবেন (বাশ, শ, কেএস, জেডএস, সিএস, টিসিএস, ...) ওয়াইল্ডকার্ডগুলি প্রয়োগ করে। বিশদগুলি ভিন্ন হতে পারে, তবে *
শূন্য বা আরও বেশি অক্ষরের সাথে ?
মিলে যাওয়া এবং কোনও একক অক্ষরের সাথে মিলে যাওয়ার মূল সিনট্যাক্স যুক্তিসঙ্গতভাবে সামঞ্জস্যপূর্ণ।
বিশেষত ব্যাশের জন্য, এটি বাশ ম্যানুয়ালটির "ফাইল নাম সম্প্রসারণ" বিভাগে নথিভুক্ত করা হয়েছে; চালান info bash
এবং "ফাইলের নাম সম্প্রসারণ" অনুসন্ধান করুন, বা এখানে দেখুন ।
এটি শেল দ্বারা করা হয়ে থাকে, এবং পৃথক আদেশ দ্বারা নয়, এর কিছু মজার (এবং কখনও কখনও অবাক করা) পরিণতি ঘটে। এ সম্পর্কে সর্বোত্তম বিষয় হ'ল ওয়াইল্ডকার্ড পরিচালনা সমস্ত কমান্ডের সাথে সামঞ্জস্যপূর্ণ ; শেলটি যদি এটি না করে, অবশ্যম্ভাবীভাবে কিছু কমান্ড বিরক্ত করে না, এবং অন্যরা এটি সূক্ষ্মভাবে বিভিন্ন উপায়ে করতে পারে যা লেখক "ভাল" বলে মনে করেছিলেন। (আমি মনে করি উইন্ডোজ কমান্ড শেলটিতে এই সমস্যা রয়েছে তবে আমি এর সাথে আরও মন্তব্য করার মতো যথেষ্ট পরিচিত নই))
অন্যদিকে, একাধিক ফাইলের নাম পরিবর্তন করতে একটি আদেশ লিখতে অসুবিধা হচ্ছে। আপনি যদি লিখেন:
mv *.log *.log.bak
এটি সম্ভবত ব্যর্থ হবে, যেহেতু *.log.bak
বর্তমান ডিরেক্টরিটিতে ইতিমধ্যে বিদ্যমান ফাইলগুলির ভিত্তিতে প্রসারিত হয়েছে। কমান্ড রয়েছে যা এই ধরণের কাজ করে তবে ফাইলগুলির নাম কীভাবে পরিবর্তন করা যায় তা নির্দিষ্ট করতে তাদের নিজস্ব বাক্য গঠন ব্যবহার করতে হবে। কিছু কমান্ড (যেমন find
) তাদের নিজস্ব ওয়াইল্ডকার্ড সম্প্রসারণ করতে পারে; শেলের সম্প্রসারণ দমন করতে আপনাকে যুক্তিগুলি উদ্ধৃত করতে হবে:
find . -name '*.txt' -print
শেলের ওয়াইল্ডকার্ড সম্প্রসারণ পুরোপুরি কমান্ড-লাইন আর্গুমেন্টের সিনট্যাক্স এবং বিদ্যমান ফাইলগুলির সেটের উপর ভিত্তি করে। এটা তোলে করতে পারবে না কমান্ডের অর্থ দ্বারা প্রভাবিত হতে। উদাহরণস্বরূপ, আপনি যদি সমস্ত .log
ফাইলকে পিতামাতার ডিরেক্টরিতে সরিয়ে নিতে চান তবে আপনি টাইপ করতে পারেন:
mv *.log ..
আপনি যদি ভুলে যান ..
:
mv *.log
এবং .log
বর্তমান ডিরেক্টরিতে ঠিক দুটি ফাইল হতে পারে , এটি এতে প্রসারিত হবে:
mv one.log two.log
যা নতুন নামকরণ one.log
এবং ক্লোবার করবে two.log
।
সম্পাদনা : এবং ৫২ টি আপগেটের পরে, একটি গ্রহণযোগ্যতা এবং একটি গুরু ব্যাজ, সম্ভবত আমার শিরোনামে প্রশ্নের উত্তরটি দেওয়া উচিত।
-d
অথবা --directory
বিকল্পে ls
শুধুমাত্র ডিরেক্টরি তালিকায় বলতে নেই। এটি এটিকে ডিরেক্টরি হিসাবে কেবল তাদের তালিকা হিসাবে তালিকাভুক্ত করতে বলে, সামগ্রীগুলি নয়। আপনি যদি যুক্তি হিসাবে একটি ডিরেক্টরি নাম দেন তবে ls
ডিফল্টরূপে এটি ডিরেক্টরিটির বিষয়বস্তু তালিকাভুক্ত করে , যেহেতু সাধারণত আপনি আগ্রহী হন। -d
বিকল্পটি কেবলমাত্র ডিরেক্টরিটিকে নিজেই তালিকাবদ্ধ করতে বলে। ওয়াইল্ডকার্ডের সাথে একত্রিত হয়ে এটি বিশেষভাবে কার্যকর হতে পারে। আপনি যদি টাইপ করেন:
ls -l a*
ls
আপনি প্রতিটি একটি দীর্ঘ তালিকা দেব ফাইল যার নাম দিয়ে শুরু হয় a
, এবং বিষয়বস্তু প্রতিটি ডিরেক্টরির যার নাম দিয়ে শুরু হয় এর a
। আপনি যদি কেবল ফাইল এবং ডিরেক্টরিগুলির একটি তালিকা চান, প্রতিটি জন্য একটি লাইন, আপনি ব্যবহার করতে পারেন:
ls -ld a*
যা এর সমান:
ls -l -d a*
আবার মনে রাখবেন যে ls
কমান্ডটি *
চরিত্রটি কখনও দেখেনি ।
যেখানে man ls
এটি নথিভুক্ত করা হয়েছে সেখানে ls
ইউনিক্সের মতো কোনও সিস্টেমের জন্য আপনাকে কমান্ডের ডকুমেন্টেশন প্রদর্শন করবে । বেশিরভাগ লিনাক্স-ভিত্তিক সিস্টেমে ls
কমান্ডটি জিএনইউ কোর্টিল প্যাকেজের অংশ; আপনার যদি info
কমান্ড থাকে তবে হয় info ls
বা info coreutils ls
আপনাকে আরও সুনির্দিষ্ট এবং বিস্তৃত ডকুমেন্টেশন দেওয়া উচিত। অন্যান্য সিস্টেম, যেমন ম্যাকোস, ls
কমান্ডের বিভিন্ন সংস্করণ ব্যবহার করতে পারে এবং কমান্ড নাও থাকতে পারে info
; এই সিস্টেমগুলির জন্য, ব্যবহার করুন man ls
। আর ls --help
একটি দেখাবে অপেক্ষাকৃত ছোট ব্যবহার বার্তা (আমার সিস্টেমে 117 লাইন) যদি আপনি গনুহ coreutils বাস্তবায়ন ব্যবহার করছেন।
এবং হ্যাঁ, এমনকি বিশেষজ্ঞরাও এখন থেকে ডকুমেন্টেশনের সাথে পরামর্শ করতে হবে। আরও দেখুন এই ক্লাসিক তামাশা ।