'Ls -d' কমান্ড ডিরেক্টরি প্রদর্শন করছে না। ফাইল এবং ডিরেক্টরিগুলির পরিবর্তে কেবল ডিরেক্টরি প্রদর্শন করার জন্য কি 'ls' পাওয়ার উপায় আছে?


44

lsফাইল এবং ডিরেক্টরিগুলির পরিবর্তে কেবল ডিরেক্টরি প্রদর্শন করার উপায় আছে কি ?

ম্যান পৃষ্ঠা থেকে:

   -d, --directory
          list directory entries instead of contents, and do not  derefer
          ence symbolic links

সুতরাং আমি যদি এটি /ডিরেক্টরিতে টাইপ করি তবে আমি কেবল ডিরেক্টরিগুলি দেখতে আশা করি। পরিবর্তে এটি দেখায় "।"

$ cd /
$ ls -d
.

আমি ls -dআমাকে এটি দেখানোর প্রত্যাশা করছিলাম :

$ ls -d
bin    data  home        opt    sbin  sys      var
boot   dev   lib         media  proc  selinux  tmp
cdrom  etc   lost+found  mnt    root  srv      usr

lsফাইল এবং ডিরেক্টরিগুলির পরিবর্তে কেবল ডিরেক্টরি প্রদর্শন করার উপায় আছে কি ?


17
এলএসডি করতে খুব বিভ্রান্তিকর হতে।
Boehj

2
@ জিন এলএস -ডি * / কাজ করে। তবে আমার নিজের পছন্দমতো আউটপুট পেতে কেন আমাকে "* /" করতে হবে?
নীলাও

8
@ এনেলাআর -dকেবল ডিরেক্টরিগুলি তালিকাভুক্ত করার অর্থ নয়, এর অর্থ ডিরেক্টরি সামগ্রী তালিকাভুক্ত করা নয়। টাইপ করার চেষ্টা করুন ls */এবং আপনি সমস্ত ডিরেক্টরিগুলির সামগ্রী দেখতে পাবেন see
জিন

2
আমি করেছি ldirকরার alised ls -d */আমার মধ্যে .bashrcকরতে সহজ ... এই
DQdlM

1
ls আপনাকে প্রচুর তথ্য দিতে পারে তবে কেবলমাত্র ডিরেক্টরি দেখানোর জন্য একটিও পতাকা নয় ...
ডিমিডাক

উত্তর:


50

আপনার প্রত্যাশাগুলি ডস থিংক / উইন্ডোজ চিন্তার উপর ভিত্তি করে এবং ভুল and এমএস-ডস, উইন্ডোজ এবং প্রকৃতপক্ষে কয়েকটি অন্যান্য আইবিএম / মাইক্রোসফ্ট অপারেটিং সিস্টেমে ওয়াইল্ডকার্ড সম্প্রসারণ কমান্ড নিজেই করে থাকে এবং কমান্ডের /aবিকল্পের মতো জিনিসগুলি dirওয়াইল্ডকার্ড বিস্তারের সময় অ্যাট্রিবিউট ফিল্টার হিসাবে কাজ করে। dirওয়াইল্ডকার্ডগুলি প্রসারিত করে *, যা কমান্ড ইন্টারপ্রেটার যেমন হয় তেমন পাস করে এবং যদি /aনির্দিষ্ট করা থাকে তবে এটি ফেরত দেওয়া ক্ষেত্রে উপযুক্ত ফিল্টার প্রয়োগ করে। (কিছু অপারেটিং সিস্টেমে, ডিরেক্টরি এবং অপারেটিং সিস্টেমের কার্নেল, বা এর ফাইল সিস্টেম ড্রাইভারগুলি গণ্য করার জন্য অ্যাট্রিবিউট ফিল্টারগুলি সিস্টেম কলকে দেওয়া যেতে পারে))

ইউনিসিসে এবং লিনাক্সে, ওয়াইল্ডকার্ড সম্প্রসারণ শেল দ্বারা করা হয়, এবং অনুমতিগুলি থেকে গাফেল। যখন, রুট ডিরেক্টরিতে, আপনি করবেন

এলএস *

কি lsকমান্ড নিজেই গ্রহণ করে শেল থেকে (ভালো কিছু) হল

ls বিন হোম অপ্ট var বুট ডেভ tmp ইত্যাদি হারিয়ে গেছে + মূল ইউএসআর পাওয়া গেছে

কি -d/ --directoryবিকল্প নেই বন্ধ কি স্বাভাবিকভাবে পরবর্তী ঘটে । এরপরে সাধারণত যা ঘটে তা হ'ল lsতার প্রতিটি যুক্তিকে ঘুরে ফিরে দেখে, সেগুলি ডিরেক্টরিতে দেখায় এবং তাদের বিষয়বস্তুগুলি গণনা করার সিদ্ধান্ত নেয়। যুক্তিযুক্ত ফাইলগুলির নামগুলির জন্য, এটি কেবল ফাইলের জন্য তথ্য প্রিন্ট করে। সঙ্গে -dবিকল্প, ডিরেক্টরি মাত্র ফাইলের মত চিকিত্সা করা হয়। সুতরাং lsপ্রতিটি ডিরেক্টরি জন্য তথ্য মুদ্রণ আউট যে এটি তার আর্গুমেন্ট হিসাবে পাস হয়, যেমন তারা ফাইল যদি এটি করবে।

তাই -d নয় একটি "শুধুমাত্র ডিরেক্টরি ছাপি" বিকল্প। আসলে, কেবল এমন কোনও বিকল্প নেই; এরকম বিকল্প হতে পারে না । ওয়াইল্ডকার্ড সম্প্রসারণ শেল দ্বারা করা হয়, এবং ( shকমপক্ষে একটি পসিক্সে ) শেলটি অনুমতিগুলির তালিকা এবং ফাইলের টাইপ বিটগুলি যখন *নামের তালিকায় প্রসারিত হয় তা পরীক্ষা করার জন্য বলার উপায় নেই । কেবল ডিরেক্টরিগুলির নামের তালিকা পাওয়ার জন্য, findকমান্ডটি ব্যবহার করে , যেমনটি ব্যাখ্যা করা হয়েছে ztank1013, বা স্ল্যাশের সাথে শেষ হওয়া পথের নামটি ডিরেক্টরি এন্ট্রি বোঝায় সেই কৌশলটি ব্যবহার .করা প্রয়োজন Jin। ( Jinকৌতুকটি শেষ হয়ে lsকমান্ডটি দিয়ে আর্গুমেন্ট গ্রহণ করে

এলএস বিন / হোম / অপ্ট / ভার / বুট / ডেভ / টিএমপি / ইত্যাদি / হারানো + পাওয়া / মূল / ইউএসআর /

কারণ প্যাটার্ন */দুই উপাদান সঙ্গে সত্য ম্যাচিং pathnames হয়, দ্বিতীয় হচ্ছে খালি, এবং তাই করা হয় না বেশ কি করছেন আকাঙ্ক্ষিত ছিল। বিশেষত, এটি ডিরেক্টরিগুলির দিকে নির্দেশ করে প্রতীকী লিঙ্কগুলি এমন আচরণ করবে যেগুলি তারা ডিরেক্টরি ছিল))

ls -dএকটি ছাড়া আচরণের উপরোক্তগুলির *একটি সাধারণ বর্ধন। একটি সম্পর্কে কেবল আরও একটি বিষয় জানতে হবে ls: যখন এটির কোনও আর্গুমেন্ট দেওয়া হয় না, তখন এটি একটি ডিফল্ট যুক্তি ধরে নেয় .। এখন ছাড়া-d বিকল্প, নামে ডিরেক্টরি সামগ্রীগুলিতে উপরোক্ত আচরণ বিশালাকার .গণিত হচ্ছে এবং এটির সামগ্রীগুলি জন্য তথ্য প্রদর্শিত। সঙ্গে-d বিকল্প, ডিরেক্টরি .চিকিত্সা করা হয় ঠিক যেমন যদি এটি একটি ফাইল ছিল, এবং তার নিজস্ব তথ্য প্রদর্শন করা হয় বদলে এটির সামগ্রীগুলি গণিত।


3
"এ জাতীয় কোনও বিকল্প থাকতে পারে না " - এটি একটি বরং দৃ .় বক্তব্য - এই জাতীয় বিকল্পটির বাস্তবায়ন সুস্পষ্ট: একটি ডিরেক্টরিবিহীন যুক্তি দেখুন এবং এটিকে উপেক্ষা করুন। যা কার্যকর করা যায় না তা হ'ল dir /s *.txt[
সন্ধানের

6
ঠিক আছে, তবে যুক্তিসঙ্গত কারণ নেই ls এর এমন কোনও বিকল্প থাকতে পারে না যা আর্গুমেন্ট হিসাবে পাস করা আইটেমগুলিকে ফিল্টার করবে। যে "ওয়াইল্ডকার্ড সম্প্রসারণ এন্ট্রি টাইপ দেখা থেকে শুরু তালাকপ্রাপ্ত হয়", অপ্রাসঙ্গিক যেহেতু এই কিছুই আছে এ সব ওয়াইল্ডকার্ড প্রসারের করতে - শুধুমাত্র এন্ট্রি ধরনের পরীক্ষা করা হয় যা কোন কারণে এটা সম্পন্ন করা যাবে না আছে সম্পূর্ণরূপে ম মধ্যে। যদি ls --color তাদের নীল শেড করতে পারে, ls -F তাদের পরে / পরে একটি গুলি রাখতে পারে এবং ls -l মোডে একটি 'd' রাখতে পারে, তবে অন্য কিছু অনুমানের বিকল্প সেগুলি বাদ দিতে পারে। এই জাতীয় বিকল্প নেই বলে এর অর্থ এটি " পারবেন না "।
র্যান্ডম 832

5
Random832 একটি শালীন বিন্দু করে তোলে: ls পারে ফিল্টার ফাইল বা ডিরেক্টরি করার জন্য একটি বিকল্প আছে, এবং এই শেল Do সম্প্রসারণ থাকার সঙ্গে পারস্পরিক একচেটিয়া নয়। এলএস-এর মধ্যে কোনও রেসের শর্ত নেই: এটি ফাইলগুলিকে সাধারণভাবে স্ট্যাটাস হিসাবে এটি ফিল্টার করতে পারে। (শেল সম্প্রসারণ এবং ls এর মধ্যে ইতিমধ্যে একটি প্রতিযোগিতা রয়েছে, এফডাব্লুআইডাব্লু।) আমি মনে করি শেল প্রসারণ কেবল কারণের একটি অংশ: শেলের সম্প্রসারণ (এবং সাধারণভাবে ফিল্টারিং) এলএস প্রয়োগ করা হয় না কারণ এটি আবার সিপি প্রয়োগ করা প্রয়োজন would , এমভি ইত্যাদি। ইউনিক্স হ'ল "একটি কাজ কর এবং এটি ভালভাবে কর"। আপনার যদি উন্নত ফিল্টারিংয়ের প্রয়োজন হয় তবে তার জন্য সরঞ্জাম রয়েছে।
থানাটোস

2
ls -pবিকল্পটি কেবল /ডিরেক্টরিতে একটি প্রতীক যুক্ত করে। এমন কিছু দিয়ে আউটপুট মুদ্রণ ক্ষমতা প্রসারিত না করার কোনও কারণ নেই যা কেবলমাত্র এগুলি (পরিবর্তে ls -p | grep /) আউটপুট দেয় ।
অ্যান ভ্যান রসুম

3
@ জেডিবিপি, অ্যাড-হোমনেম আক্রমণ ("কিড্ডো") এবং অহংকার (আপনি ব্যতীত প্রত্যেকে "ইউনিক্সের মূল বিষয়গুলি" জানেন না) কোনও প্রযুক্তিগত আলোচনার সাথে সম্পর্কিত নয়। তদতিরিক্ত, যখন আপনি যুক্তি দেন যে কমান্ড বিকল্পটি শেল দ্বারা সম্পন্ন ওয়াইল্ডকার্ড সম্প্রসারণ নিয়ন্ত্রণ করতে পারে না তখন আপনি খড়ের লোকটিকে টানছেন। অবশ্যই, এটি পারে না! র্যান্ডম 832, না থানাটোস, না অ্যান ভ্যান রসুম, এবং এমনকি প্রশ্নটিতে কোনওভাবেই ওয়াইল্ডকার্ডের উল্লেখ নেই। আপত্তি ছিল যে ls --only-directories .বিকল্পটি lsশেষ পর্যন্ত যুক্ত করা যেতে পারে ।
এমকালকভ

30

আপনি ব্যবহার করতে পারেন ls -d */, বা ls -d .*/লুকানো ডিরেক্টরি।


চতুর কৌশলটি ব্যবহার করে /!
মনো

হ্যাঁ এটা ভাল। এমন কোনও মামলা আছে যেখানে এটি কাজ করে না?
আইরিন

5
এক লাইনে উত্তর দেওয়ার জন্য +1। আমি অনুমান করছি যে গৃহীত উত্তরটিও আছে, এটি কোথাও আছে।
ক্যালকুলাস নাইট

আপনি ইতিমধ্যে ডিরেক্টরিতে না হয়ে স্ক্রিপ্টে এটি কীভাবে ব্যবহার করতে পারেন?
দিমিডাক

13

এটা চেষ্টা কর

 find . -mindepth 1 -maxdepth 1 -type d

আপনার বর্তমান অবস্থানের অধীনে কেবল ডিরেক্টরি পেতে।


5

তুমি এটাও পছন্দ করতে পারো

tree -d 

যা গাছের কাঠামোর গ্রাফিকাল চিত্রের সাথে সুন্দরভাবে সমস্ত ডিরেক্টরি এবং উপ ডিরেক্টরিকে তালিকাবদ্ধ করে।


3
এবং কেবলমাত্র এক স্তরের গভীরতার জন্য:tree -dL 1
অ্যান ভ্যান রসুম

দুর্ভাগ্যক্রমে আপনি গাছের সাথে অনেকগুলি একত্রিত করতে পারবেন না। # ট্রি -ডি |
গ্রেপ ডাব্লুসিএল

5

আপনি যদি কেবলমাত্র ls -l(ELL) বিকল্পের সাথে ডিরেক্টরিগুলি দেখতে চান তবে নীচে আপনি ব্যবহার করতে পারেন:

find -maxdepth 1 -type d -ls;

উপরেরটি কেবল আপনাকে -lবিকল্পটি দেবে যেমন আপনি বিকল্পটি পেয়েছেন।


1
find -maxdepth 1 -type d -exec ls -d {} +সাধারণ lsফর্ম্যাটে আউটপুট পেতে এটি ব্যবহার করা আরও ভাল ।
এমকালকভ

4

আপনি যদি অন্য কোনও উপায়ে কাজটি পেতে চান তবে এটি ব্যবহার করে দেখুন:

ls -l | grep ^d

যদিও এই পরিস্থিতিতে একটি একক সরঞ্জামই যথেষ্ট। পাইপ লাইন সর্বদা আপনাকে সাহায্য করার জন্য রয়েছে। আমি লিনাক্সের নমনীয়তা পছন্দ করি, যা আমি আশা করি আপনি করেন।


1
এটি ডিরেক্টরিগুলির চেয়ে বেশি ফিল্টার করে চলেছে।
ocodo

2
@ স্লোমোজো, এটি ডিরেক্টরিগুলি ছাড়াও সমস্ত কিছু ফিল্টার করে দেবে। আপনি কি বুঝাতে চাচ্ছিলেন?
এমকালকভ

হ্যাঁ, আপনার -l (দীর্ঘ) দরকার যাতে অনুমতিগুলি লাইন ধরে যায়। ডিরেক্টরি জন্য "ডি"। এছাড়াও আপনি ডিরেক্টরি প্রবেশের একটি "দীর্ঘ" তালিকা পান যা দুর্দান্ত।
জিওও

1

আমি আশা করি এটি আপনার প্রয়োজন সংশোধন করবে। নীচের কমান্ডটি প্রদত্ত পথে কেবল ডিরেক্টরিগুলি তালিকাভুক্ত করবে।

ls -F <path> | grep /

উদাহরণ:

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