UNIX- এ কেবল ডিরেক্টরিগুলি তালিকাভুক্ত করা হচ্ছে


219

আমি কেবল নির্দিষ্ট পথে কেবল ডিরেক্টরিগুলির তালিকা তৈরি করতে চাই (এ lsজাতীয় বিকল্প নেই)। এছাড়াও, এটি কি একটি একক লাইন কমান্ড দিয়ে করা যেতে পারে?


12
ভবিষ্যতের জন্য: ইউনিক্স / লিনাক্স বুনিয়াদি প্রশ্নগুলির ধরণের প্রশ্নাগুলি প্রোগ্রামিংয়ের সাথে সম্পর্কিত নয় তবে সেখানে আরও ভাল রাখা উচিত: unix.stackexchange.com
ইকক্স

উত্তর:


315

ls -d */বর্তমান ডিরেক্টরি ডিরেক্টরি ডিরেক্টরি তালিকাতে এটি চেষ্টা করুন


17
আরে, এটা বেশ নিফটি, আমি সবসময় আমাদের অভ্যস্ত ছিলাম ls -al | grep '^d'- এটি অনেক বেশি সংবেদনশীল।
paxdiablo

43
কেন * / ?? দয়া করে ব্যাখ্যা করুন!?
চন্দীপ

6
আমার যথাযথ ব্যাখ্যা নেই, তবে আমি জানি যে */কেবলমাত্র ফরোয়ার্ড স্ল্যাশ দিয়ে শেষ হওয়া আইটেমগুলির প্রদর্শনকে বাধ্য করে, যা এই ক্ষেত্রে ডিরেক্টরি হিসাবে দেখাবে, এমনকি -Fবিকল্পের বিকল্প lsব্যবহার না করা সত্ত্বেও । এর আচরণের মতো ls *phpএবং এটি phpকোনও ডিরেক্টরিতে শেষ হওয়া সমস্ত ফাইলকে কীভাবে প্রদর্শন করে ।
ডেভিড হ্যানকক

3
@ ব্যবহারকারী975234 কেউ একটি অনুরূপ প্রশ্ন জিজ্ঞাসা করেছে, এবং একটি দুর্দান্ত উত্তম পোস্ট লিঙ্ক
user1766760

17
শুধু echo */খুব একই কাজ করতে হবে
টি

95

এটা চেষ্টা কর:

find . -maxdepth 1 -type d

8
আমার কাছে এটি দেখতে হবে এমনভাবে হওয়া উচিত। প্রস্তাবিত lsসমাধানগুলির বিপরীতে , findকাজটি করার জন্য পুরোপুরি দায়বদ্ধ (শেল ওয়াইল্ডকার্ড সম্প্রসারণের উপর নির্ভর করে না, যা সীমাবদ্ধতা আরোপ করতে পারে)। এটি আরও অনেক সংক্ষিপ্ত।
পিটারপ

1
এটির মধ্যে খারাপ জিনিস হ'ল আপনি যদি ফলাফলগুলি লুপ করার চেষ্টা করছেন এবং আপনার ফলাফলের নামগুলিতে ফাঁক রয়েছে তবে এটি কাজ করে না।
ubiquibacon

2
অন্যথা, আপনি ডিরেক্টরি নিজেই অন্তর্ভুক্ত করা চাইনি যদি: find * -maxdepth 0 -type d
জেমস কো

@ ইউবিকিবাকন হয় হয় findএর বিকল্প -print0বা -execবিকল্প ব্যবহার করুন ।

1
এটি আসলেই ধীর, কমপক্ষে আমার ম্যাকের জন্য। এটি সম্পূর্ণ পুনরাবৃত্ত অনুসন্ধান করতে findপারে যা সাধারণত হয় তবে কেবল ফোল্ডারগুলি গভীরতা 1 এ আউটপুট দেয়
কারা ব্রাইটওয়েল

22

পরবর্তী

find * -maxdepth 0 -type d

মূলত '*' এর প্রসারণ ফিল্টার করে, অর্থাৎ বর্তমান দির সমস্ত প্রবেশিকা -type dশর্ত অনুসারে।

সুবিধা হ'ল আউটপুট একই রকম ls -1 *, তবে কেবল ডিরেক্টরি এবং এন্ট্রিগুলি ডট দিয়ে শুরু হয় না


13

আপনি ব্যবহার করতে পারেন ls -d */বাtree -d

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

উদাহরণস্বরূপ জেডএসএইচ:

zsh # ls *(/)

3
আপনি কি ইউনিক্সের স্বাদ পাবেন tree?
জনসিওয়েব

উদাহরণস্বরূপ সমস্ত বড় লিনাক্সের দুর্দশা? দুঃখিত, আমি প্রশ্ন পাই না?
ইকক্স

1
আমার একটি ডেবিয়ান ডিস্ট্রো রয়েছে, এবং treeএটি ডিফল্টরূপে ইনস্টল করা হয়নি (যদিও এটি সারণীতে রয়েছে)।
স্টিফেন শ্রুগার

1
ডাউনভোটস যেমন আমি বিশ্বাস করি treeকমান্ডটি কোনও দেশীয় ইউনিক্স কমান্ড নয় (দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন)।
টিয়াগো কার্ডোসো

10

যেহেতু এটি করার কয়েক ডজন উপায় রয়েছে, তাই এখানে অন্যটি রয়েছে:

tree -d -L 1 -i --noreport
  • -d: ডিরেক্টরি
  • -L: গাছের গভীরতা (সুতরাং 1, আমাদের কার্যক্ষম ডিরেক্টরি)
  • -i: কোনও ইন্ডেন্টেশন নেই, কেবল প্রিন্টের নামগুলি
  • --noreport: গাছের তালিকা শেষে তথ্য রিপোর্ট করবেন না

এবং সুইচগুলি ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ। স্ট্যাক ওভারফ্লো উত্তরগুলির বিষয়ে, আমি সর্বদা প্রশংসা করি যখন লোকেরা আপনার মত একটি ব্যাখ্যা দিয়ে বনাম করে তোলে "" কেবলমাত্র ম্যান এন্ট্রি পড়ুন! " <- এটি কোনও উত্তর নয়।
ফিউশন 27

: লাইন 2 (শুধুমাত্র একটি বিন্দু দিয়ে লাইন এড়িয়ে যান) থেকে আরম্ভ করার জন্যtree -d -L 1 -i --noreport | tail -n +2
adius

এটি সর্বাধিক-র‌্যাঙ্কড সমাধান যা নরম-সংযুক্ত ডিরেক্টরিগুলি তালিকাভুক্ত করে এবং এটি একটি লিঙ্ক হিসাবে প্রকাশ করে কার্যকর পদ্ধতিতে করে। আমি tree -C -d -L 1 -i --noreport | tail -n+2
তারতম্যটি

9
ls -l | grep '^d'

আপনি একটি উপনাম তৈরি করতে এবং এটি প্রোফাইল ফাইলে রাখতে পারেন

alias ld="ls -l| grep '^d'"

1
লিঙ্কগুলি এই আদেশের সাথে দেখা হয় না। এবং একটি লিঙ্ক একটি ফাইল বা ডিরেক্টরি হতে পারে। উদাহরণ: lrwxrwxrwx 1 রুট রুট 21 এপ্রিল 15 17:38 ক্রোন -> / lib / init / upstart- কাজ।
সি-টয়েস্কা

7
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'

আমি খুঁজে। -ম্যাক্সডেপথ 1-টাইপ ডি-নাম [^ \।] * | | সেড এর: ^ \ ./ :: 'zsh: কোন মিল খুঁজে পাওয়া যায় নি: [^।] *
মাইকেল কোল

6

বর্তমান তালিকাভুক্ত ডিরেক্টরি ডিরেক্টরি ডিরেক্টরি ls -d */ব্যবহার করতে পারেন। এবং যদি আপনার লুকানো ডিরেক্টরিগুলি তালিকাভুক্ত করতে প্রয়োজন তবে এই কমান্ডটি ব্যবহার করুন ls -d .*/


6

ডিরেক্টরি তালিকা পেতে এটি ব্যবহার করুন

ls -d */ | sed -e "s/\///g"

ls -d <কাস্টম- ডিরেক্টরি- পাথ> | sed -e "s / \ /// g" কাজ করছে না .. কোন ক্লু?
ধওয়ানিত

ধন্যবাদ! আমি কেবল সমস্ত অনুমতি ছাড়াই ডিরেক্টরি তালিকা চেয়েছিলাম এবং এটি কৌশলটি করেছে। :)
কোডিংজেরেমি

5

find specifiedpath -type d

আপনি যদি উপ-ডিরেক্টরিতে পুনরাবৃত্তি করতে না চান, আপনি পরিবর্তে এটি করতে পারেন:

find specifiedpath -type d -mindepth 1 -maxdepth 1

নোট করুন যে "ডট" ডিরেক্টরিগুলি (যার নাম দিয়ে শুরু .হবে) খুব তালিকাভুক্ত হবে; কিন্তু বিশেষ ডিরেক্টরি .না ..। আপনি যদি "ডট" ডিরেক্টরিগুলি না চান তবে আপনি কেবল grepসেগুলি আউট করতে পারেন :

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'


1
উল্লেখ জন্য ভোট দিন mindepthপরিত্রাণ পেতে .! 😁
অ্যাডিয়াস

5

উত্তরটি আপনার শেলের উপর নির্ভর করবে ।

ইন zsh, উদাহরণস্বরূপ, আপনি নিম্নলিখিতগুলি করতে পারেন:

echo *(/)

এবং বর্তমান ওয়ার্কিং ডিরেক্টরিতে থাকা সমস্ত ডিরেক্টরি প্রদর্শিত হবে।

দেখুন man zshexpnআরও তথ্যের জন্য।

একটি বিকল্প পদ্ধতির ব্যবহার find(1)হ'ল, যা বেশিরভাগ ইউনিক্স স্বাদে কাজ করা উচিত:

find . -maxdepth 1 -type d -print  

find(1)অনেক ব্যবহার আছে, তাই আমি অবশ্যই সুপারিশ করব man find


4

এটি সম্পাদন করার জন্য আপনি treeকমান্ডটি এর dস্যুইচ দিয়ে ব্যবহার করতে পারেন ।

% tree -d tstdir
tstdir
|-- d1
|   `-- d11
|       `-- d111
`-- d2
    `-- d21
        `-- d211

6 directories

দেখতে man treeআরও তথ্যের জন্য।


আমি ডাউনভোট করি নি, ঠিক একই প্রশ্ন ছিল। দেখা যাচ্ছে যে আপনার উত্তরটি ইকক্সের একটি দ্বিধা, সম্ভবত সে কারণেই?
লুই ওয়াওয়ারু

1
@ লুইস - ধন্যবাদ আমি তার উল্লেখ সম্পর্কে কখনও খেয়াল করি নি tree। ওহ ভাল, কারো বজ্র চুরি করার আমার উদ্দেশ্য ছিল না?
slm

গাছটি কী করে তার দৃশ্যধারণের জন্য উত্সাহ প্রদান করছে
আন্ড্রেজ

আমি বিশ্বাস করি ডাউনটা হ'ল কারণ এটি স্ট্যাকওভারফ্লো.com/a/ 3667405
টায়াগো কার্ডোসো

@ টিয়াগোকার্ডোসো - আমার 2 বছরের মধ্যে একটি পূর্বাভাস দেয়।
slm

2

আমার যদি এই ডিরেক্টরিটি থাকে:

ls -l

lrwxrwxrwx  1 nagios nagios     11 août   2 18:46 conf_nagios -> /etc/icinga
-rw-------  1 nagios nagios 724930 août  15 21:00 dead.letter
-rw-r--r--  1 nagios nagios  12312 août  23 00:13 icinga.log
-rw-r--r--  1 nagios nagios   8323 août  23 00:12 icinga.log.gz
drwxr-xr-x  2 nagios nagios   4096 août  23 16:36 tmp

সমস্ত ডিরেক্টরি পেতে, লিঙ্কগুলি সমাধান করতে -L ব্যবহার করুন:

ls -lL | grep '^d'

drwxr-xr-x 5 nagios nagios   4096 août  15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

-ল ছাড়া:

ls -l | grep '^d'

drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

কনফ_নাগিও ডিরেক্টরি অনুপস্থিত।


2
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"

1

এটি আমার পক্ষে কাজ করে চলেছে:

`ls -F | grep /`

(তবে, আমি echo */@ নোস দ্বারা উল্লিখিত হিসাবে স্যুইচ করছি )


1

এখানে আরও একটি সমাধান যা লিঙ্কযুক্ত ডিরেক্টরিগুলি দেখায়। আমি সামান্য এটি পছন্দ করি কারণ এটি "সাধারণ" এলএস-এল আউটপুটটির একটি উপসেট:

ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always

1

ব্যাশে:

ls -d */

সমস্ত ডিরেক্টরি তালিকাবদ্ধ করবে

ls -ld */

দীর্ঘ ফর্ম সমস্ত ডিরেক্টরি তালিকাবদ্ধ করবে

ls -ld */ .*/

দীর্ঘ আকারে লুকানো ডিরেক্টরি সহ সমস্ত ডিরেক্টরি তালিকাভুক্ত করবে।


আমি সম্প্রতি zsh (MacOS কাতালিনা) এ চলেছি এবং এটি পেয়েছি:

ls -ld */ .*/

যদি বর্তমান ডিরেক্টরিটিতে কোনও গোপন ডিরেক্টরি না থাকে তবে আর কাজ করে না।

zsh: no matches found: .*/

এটি উপরের ত্রুটিটি মুদ্রণ করবে তবে কোনও ডিরেক্টরি মুদ্রণ করতে ব্যর্থ হবে।

ls -ld *(/) .*(/)

একইভাবে ব্যর্থ হয়।

আমি এখনও এটি খুঁজে পেয়েছি যে:

ls -ld */;ls -ld .*/

একটি শালীন কাজ। ;কমান্ড বিভাজক হয়। তবে এর অর্থ হ'ল যদি কোনও লুকানো ডিরেক্টরি নেই, তবে এটি ডিরেক্টরিগুলি তালিকাভুক্ত করবে এবং কোনও গোপন ডিরেক্টরিগুলির জন্য ত্রুটিটি মুদ্রণ করবে:

foo
bar
zsh: no matches found: .*/

lsআপনি কি লংগফোর্ডে তালিকাবদ্ধ
-lকরতে চান তা নির্দিষ্ট ডিরেক্টরিগুলির তালিকার শেল কমান্ডটি হ'ল (লাইন প্রতি এক আইটেম + অন্যান্য শীতল তথ্যের একগুচ্ছ)
-dসমস্ত ডিরেক্টরিকে "ফাইল হিসাবে" তালিকাভুক্ত করার পতাকা এবং এটি পুনরাবৃত্তি
*/নয় আর্গুমেন্ট 'স্ল্যাশে শেষ হওয়া সমস্ত ফাইলের তালিকা তৈরি করা'
*"কোনও কিছুর" জন্য একটি সহজ রেগেক্স কমান্ড, সুতরাং শেলটিকে "" *// '"এ শেষ হওয়া কোনও কিছু তালিকা করতে জিজ্ঞাসা করছে

দেখুন man lsআরও তথ্যের জন্য।


আমি এটি রেখেছি:

alias lad="ls -ld */;ls -ld .*/"

আমার .zshrc এ, এবং এটি ঠিকঠাক কাজ করে বলে মনে হচ্ছে।

দ্রষ্টব্য: আমি এটিও আবিষ্কার করেছি

ls -ld .*/ 2> /dev/null

এটি টার্মিনালে স্টেরার প্রিন্ট করার কারণে এটি কাজ করে না। আমি / আমার সমাধান আপডেট হলে আমি উত্তর আপডেট করব।


0

du -d1সম্ভবত সবচেয়ে সংক্ষিপ্ত বিকল্প। (যতক্ষণ না আপনাকে অন্য কমান্ডে ইনপুটটি পাইপ করার প্রয়োজন হবে না))


0

নির্দিষ্ট পথে কেবল ডিরেক্টরি তালিকা করতে ls -l টাইপ করুন গ্রেপ ড্র


drwএটিতে ফাইলগুলি অন্তর্ভুক্ত থাকতে পারে, যদি কোনও ফাইলের নাম অন্তর্ভুক্ত থাকে এবং এমন কোনও ডিরেক্টরি বাদ দেয় যা মালিক-পাঠযোগ্য এবং লিখনযোগ্য নয়। grep ^dআরও ভাল কাজ করে
টম জিচ

0

ডিরেক্টরি দীর্ঘ তালিকা

  • ls -l | গ্রেপ '^ ডি'
  • ls -l | গ্রেপ "^ ডি"

ডিরেক্টরি তালিকা
- ls -d * /


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