এলএস-ডি ফাইলগুলিও তালিকাবদ্ধ করে এবং এটি কোথায় নথিভুক্ত করা হয়?


48
  • নির্দিষ্ট করার সময় ls --directory a*এটিতে কেবল ডিরেক্টরিগুলি সূচনা করা উচিতa*
  • তবে এটি ফাইল এবং ডিরেক্টরিগুলির সূচনা করে যা দিয়ে শুরু হয় a

প্রশ্নসমূহ :

  • আমি যেখানে এই বিষয়ে কিছু ডকুমেন্টেশন পেতে পারি manএবং infoযেখানে আমার মনে হয় আমি ভাল করে দেখেছি?
  • এই কাজটি কি কেবল বাসে চলছে?


5
echo a*আপনাকে a(যদি থাকে) দিয়ে শুরু করা ফাইলগুলিও তালিকাভুক্ত করবে । এটি আরও পরিষ্কার করে তুলতে যে এটি এটি lsকরছে না বাশ।
ash108

উত্তর:


89

a*এবং *a*বাক্য গঠন শেল দ্বারা বাস্তবায়িত হয়, দ্বারা নয় lsকমান্ড।

আপনি যখন টাইপ করুন

ls a*

আপনার শেল প্রম্পটে, শেলটি a*বর্তমান ডিরেক্টরিতে বিদ্যমান সমস্ত ফাইলের তালিকায় প্রসারিত হয় যার নাম দিয়ে শুরু হয় a। উদাহরণস্বরূপ, এটি a*ক্রম প্রসারিত হতে পারে a1 a2 a3এবং সেগুলিকে যুক্তি হিসাবে পাস করবে lslsকমান্ড নিজেই কখনো দেখেনি *চরিত্র; এটা মাত্র তিন আর্গুমেন্ট দেখেন 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 বাস্তবায়ন ব্যবহার করছেন।

এবং হ্যাঁ, এমনকি বিশেষজ্ঞরাও এখন থেকে ডকুমেন্টেশনের সাথে পরামর্শ করতে হবে। আরও দেখুন এই ক্লাসিক তামাশা


8
@ থমাস: বর্তমান ডিরেক্টরিতেa* সমস্ত ফাইলের একটি তালিকায় প্রসারিত হয় যার নাম দিয়ে শুরু হয় । a
কিথ থম্পসন

2
@ থমাস: বা যে কোনও ডিরেক্টরিতে আপনি উল্লেখ করেছেন:ls subdir/a*
কিথ থম্পসন

1
শেল প্রসারণের পরে কমান্ডটি বাস্তবায়িত হয়েছে তা দেখতে echo। সুতরাং আপনি যদি যা করতে চান তা যদি জানতে চান তবে ls a*প্রথমে মৃত্যুদন্ড কার্যকর করুনecho ls a*
কার্লোস ক্যাম্পার্ডার

1
বা ঠিক echo a*... শেলটি যাইহোক বিশ্বব্যাপী সম্প্রসারণ করে
অযথা

2
@sendmoreinfo: এটি শেল এবং সেটিংসের উপর নির্ভর করে। Csh এবং tcsh এ, ব্যর্থ গ্লোব সম্প্রসারণ একটি ত্রুটি। ব্যাশে shopt -s failglobএকই আচরণের কারণ হয়। সেটিং nullglobকিন্তু failglobকারণ নয় , উদাহরণস্বরূপ, *nosuchfile*একটি খালি স্ট্রিংয়ে প্রসারিত করা।
কিথ থম্পসন

27

কিথ থম্পসনের উত্তর দেখুন; তবে ls --directory a*ফাইল এবং ডিরেক্টরিগুলি কেন দেখায় তা ব্যাখ্যা করার জন্য : --directoryবিকল্পটি ডিরেক্টরিগুলি অ-ডিরেক্টরি ফাইল দমন করে না। পরিবর্তে, এটি ডিরেক্টরিগুলি যেমন তালিকাভুক্ত করে, অন্যথায় এটি তাদের সামগ্রী তালিকাভুক্ত করে। উদাহরণ:

$ mkdir foo
$ touch foo/bar
$ ls foo
bar
$ ls --directory foo
foo

3
এই উদাহরণটি -Fবিকল্পটির সাথে আরও আকর্ষক
গ্লেন জ্যাকম্যান

6

খুব স্পষ্ট করে বলার জন্য, এটি ls (1) ম্যানুয়াল পৃষ্ঠাতে নথিভুক্ত করা হয়েছে :

-d, - ডিরেক্টরি ডিরেক্টরি অন্তর্ভুক্ত ডিরেক্টরি ডিরেক্টরি লিখুন, এবং প্রতীকী লিঙ্কগুলি dereferences না

সুষ্ঠু হতে, "বিষয়বস্তুর পরিবর্তে এন্ট্রি" সম্ভবত আরও ব্যাখ্যাযোগ্য হতে পারে:

যদি FILE ডিরেক্টরি হয় তবে ডিরেক্টরিটির তালিকা সূচী না করে নিজেই ডিরেক্টরি এন্ট্রি প্রদর্শন করুন। যদি ফাইল একটি প্রতীকী লিঙ্ক হয় তবে লিঙ্কটি দ্বারা নির্দেশিত ফাইলটির পরিবর্তে লিঙ্ক এন্ট্রি নিজেই দেখান।


পেডেন্টিক হওয়ার জন্য, ম্যান পৃষ্ঠাতে -d বিকল্পটি ব্যাখ্যা করা যেতে পারে (যদি নিখুঁতভাবে হয়) তবে আর্গুমেন্ট এক্সপেনশন এবং ওয়াইল্ডকার্ডিংটি শেল দ্বারা সম্পন্ন হওয়ার পরে ls ম্যান পৃষ্ঠাতে নথিভুক্ত করা হয় না। আপনি যদি নিজের শেলটিতে ফাইলের নাম প্রসারণ বন্ধ করে দেন, "ls a *" কেবল আপনাকে এমন একটি ফাইল দেখায় যা আক্ষরিকভাবে 'এ *' নামকরণ করা হয়।
জনি

পেডেন্টিক হওয়ার জন্য, শেল প্রসারণের উত্তর অন্যান্য উত্তরদাতারা দিয়েছিলেন, তাদের কোনওটিরই স্বল্প ব্যাখ্যা এবং এটি কীভাবে অপ্রকাশিত হতে পারে তা সম্বোধন করে না। আপনি যদি আমার পছন্দ করেন তবে যা ইতিমধ্যে ভালভাবে বলেছিল তা পুনরাবৃত্তি করতে দয়া করে আরও সরাসরি থাকুন।
এমএসডব্লিউ

4

Globbing

যেমনটি ব্যাখ্যা করা হয়েছে, ইউনিক্স জারগনে বিস্তৃতকরণ *(এবং অনুরূপ সম্প্রসারণ) বলা হয় glob, এবং সাধারণত কমান্ড প্রসেসরের একটি বৈশিষ্ট্য (ইউনিক্স পার্লেন্সে "শেল" নামে পরিচিত)। সুতরাং গ্লোববিং অন্যান্য অনেক জায়গায় ব্যবহার করা যেতে পারে; টাইপ man 7 globএকটি ক্লাসিক লিনাক্স ডিস্ট্রিবিউশনের শেল এ (অথবা দেখতে এই ) সম্পর্কে আরো জানার জন্য globBing।

ইউনিক্স গোড়ার দিকে সালে globআসলে একটি দ্বারা বাস্তবায়ন করা হয় পৃথক প্রোগ্রাম নামক /etc/glob(পৃষ্ঠা 10 দেখুন এই পুরোনো ইউনিক্স ম্যানুয়াল যে জন্য ডকুমেন্টেশন জন্য)। আজকাল, এটি কোড লাইব্রেরি দ্বারা সরবরাহিত একটি কোড রুটিন এবং সাধারণত শাঁস দ্বারা ব্যবহৃত হয়। উত্স : উইকিপিডিয়া

ডিরেক্টরি

ls -dফাইলগুলির পাশাপাশি ডিরেক্টরিগুলির তালিকা কেন ...

lsMan পৃষ্ঠা , ঠিক কি ঘটেছে ব্যাখ্যা, বরং অত্যন্ত বাহুল্যবর্জিত ব্যাখ্যা। সুতরাং এখানে একটি প্রসারিত ব্যাখ্যার চেষ্টা করা হল:

ডিফল্টরূপে ডিরেক্টরিগুলির বিষয়বস্তুগুলির নাম দেওয়ার পরে lsসেগুলি তালিকাভুক্ত করে এবং ডিরেক্টরিগুলিতে প্রতিলিঙ্কগুলির জন্য একই কাজ করবে । বিকল্প মানে (এটিও দেওয়া যায় "যখন ডিরেক্টরি (ies এর) এর নাম (গুলি) দেওয়া" পরোক্ষভাবে দ্বারা Bing) , শুধুমাত্র ডিরেক্টরি (ies এর) এর _name_s প্রদর্শিত হবে, কিন্তু না তাদের বিষয়বস্তু। একইভাবে, যখন সঙ্গে (স্পষ্টভাবে বা প্রদত্ত পরোক্ষভাবে ) নাম (গুলি) symlinks এর ডিরেক্টরি , সিমবলিক লিঙ্ক ফাইল নাম দেখাবে, না যা এটিকে রেফারেন্স বিষয়বস্তু।-dglob

-dবিকল্প কিছুই করার আছে, যতটা আমি বলতে পারো, সঙ্গে যা আইটেম তালিকাভুক্ত করা হয়; এই কাজ করা যেতে পারে (সূত্র: এখানে ) সঙ্গে find, তাই মত: find . -maxdepth 1 -type d। আমি নিশ্চিত নই যে কেবল জিএনইউ দিয়েই এটি করার ভাল উপায় আছে কিনা ls। কমান্ডটি কীভাবে ব্যবহার করতে হয় তার কয়েকটি উদাহরণ এখানে দেওয়া হল find

সংক্ষেপে সংক্ষেপে: ডিফল্টরূপে lsডিরেক্টরিগুলির বিষয়বস্তুগুলি যখন তাদের পাথের নাম দেওয়া হয় দেখায়। -dএই আচরণটি পরিবর্তন করে, কেবল ডিরেক্টরি নামটি দেখায়, যেমন একটি স্ট্যান্ডার্ড ফাইলের জন্য করা হয়।


3

ডকুমেন্টেশন বলে না যে এটি কেবল ডিরেক্টরি এন্ট্রি বারের তালিকাভুক্ত করে ডিরেক্টরি নির্দেশনা পেলে এটির বিষয়বস্তুর পরিবর্তেls দির এন্ট্রি তালিকাভুক্ত করে । বোঝার সর্বোত্তম উপায় উদাহরণস্বরূপ:

> {ice} ~ :10:47 % ls -l / 
total 97
drwxr-xr-x   2 root root  4096 May  3 00:27 bin
drwxr-xr-x   4 root root  1024 May  3 14:17 boot
drwxr-xr-x   2 root root  4096 Apr 29 13:44 cdrom
drwxr-xr-x  18 root root  4420 May  9 09:58 dev
...
lrwxrwxrwx   1 root root    33 May  3 14:16 vmlinuz -> boot/vmlinuz-3.9.0-030900-generic
lrwxrwxrwx   1 root root    29 May  3 11:07 vmlinuz.old -> boot/vmlinuz-3.8.0-19-generic
> {ice} ~ :10:47 % ls -ld /
drwxr-xr-x 25 root root 4096 May  3 14:16 /

2

ডকুমেন্টেশন শেলের একটি অংশ । বিশেষত শেল একটি কমান্ড কার্যকর করার আগে একটি নির্দিষ্ট ক্রমে বিভিন্ন প্রসার এবং বিকল্পগুলি সম্পাদন করে।

বোর্ন সামঞ্জস্যপূর্ণ শেলের জন্য শব্দ বিস্তারের ক্রম হ'ল

  1. তিলদে সম্প্রসারণ
  2. প্যারামিটার সম্প্রসারণ
  3. কমান্ড সাবস্টিটিউশন
  4. পাটিগণিত সম্প্রসারণ
  5. ক্ষেত্র বিভাজন
  6. পথের নাম সম্প্রসারণ
  7. উদ্ধৃতি অপসারণ

সুতরাং, lsকমান্ডটি *অক্ষরগুলিও দেখতে পাচ্ছে না , গ্লোব a*প্যাটার্নের সাথে মেলে সমস্ত ফাইলের সাথে যুক্তিগুলি ইতিমধ্যে প্রসারিত হয়েছে । এটি উইন্ডোজের বিপরীতে নয়, যেখানে প্রতিটি কমান্ডকে ফাইলের নাম গ্লোব্বিংয়ের প্রয়োজন হয় এই বৈশিষ্ট্যটি নিজেই প্রয়োগ করতে হয়।


1

আপনার প্রয়োজনীয় মূল শব্দটি ( man bash) হ'ল "পথের নাম সম্প্রসারণ" "


3
"পথের নাম সম্প্রসারণ" বা "ফাইলের নাম জেনারেশন" এর মতো আরও। "প্যাটার্ন ম্যাচিং" সম্পর্কিত, তবে একই নয়।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস প্রকৃতপক্ষে, তবে "প্যাটার্ন ম্যাচিং" হ'ল ম্যান পেজে "পথের নাম সম্প্রসারণ" এর একটি অনুচ্ছেদ যেখানে "ফাইলের নাম জেনারেশন" সেখানে ঘটে না (কেবল তথ্য নথিতে)।
হউক লেগেইইজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.