একটি নির্দিষ্ট ডিরেক্টরিতে ডিরেক্টরি সংখ্যা গণনা


105

নির্দিষ্ট ডিরেক্টরিতে ফোল্ডারের সংখ্যা কীভাবে গণনা করা যায়। আমি নিম্নলিখিত কমান্ডটি ব্যবহার করছি তবে এটি সর্বদা অতিরিক্ত একটি সরবরাহ করে।

find /directory/ -maxdepth 1 -type d -print| wc -l

উদাহরণস্বরূপ, যদি আমার কাছে 3 টি ফোল্ডার থাকে তবে এই কমান্ডটি 4 সরবরাহ করে it


4
বর্তমান ডিরেক্টরি '' এর কারণে অতিরিক্ত 1 টি গণনা রয়েছে। ' , যা 'অনুসন্ধান' দ্বারাও বিবেচিত হয়।
প্যাটেল দেবেন

উত্তর:


95

find ডিরেক্টরি নিজেই মুদ্রণ করছে:

$ find .vim/ -maxdepth 1 -type d
.vim/
.vim/indent
.vim/colors
.vim/doc
.vim/after
.vim/autoload
.vim/compiler
.vim/plugin
.vim/syntax
.vim/ftplugin
.vim/bundle
.vim/ftdetect

পরিবর্তে আপনি ডিরেক্টরিটির বাচ্চাদের পরীক্ষা করতে পারেন এবং এগুলিতে মোটেও নামবেন না:

$ find .vim/* -maxdepth 0 -type d
.vim/after
.vim/autoload
.vim/bundle
.vim/colors
.vim/compiler
.vim/doc
.vim/ftdetect
.vim/ftplugin
.vim/indent
.vim/plugin
.vim/syntax

$ find .vim/* -maxdepth 0 -type d | wc -l
11
$ find .vim/ -maxdepth 1 -type d | wc -l
12

আপনি এটি ব্যবহার করতে পারেন ls:

$ ls -l .vim | grep -c ^d
11


$ ls -l .vim
total 52
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
-rw-rw-r--  1 anossovp anossovp   48 Aug 29  2012 filetype.vim
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
-rw-rw-r--  1 anossovp anossovp 2505 Aug 29  2012 README.rst
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax

$ ls -l .vim | grep ^d
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax

চমৎকার! আপনি $ ls -l .vimপিএইচপি দিয়ে এটি কীভাবে করবেন ? বা তালিকা ছাড়া কীভাবে কেবল মোট পাওয়া যায়। মানে, এক্ষেত্রে কি কেবল পাওয়া যাবে 52?
প্যাথ্রোস

হাহ। আমি পছন্দ করি যে পাওয়ারশেলের বিরুদ্ধে যুক্তিটি কীভাবে যে BASH প্রতিটি উপায়ে সহজ ... এটি করার জন্য POSH কমান্ডটি দেখতে চান? (ls).Count
কলব ক্যানিয়ন

@Pathros ব্যবহারের উল্লিখিত glob পতাকা GLOB_ONLYDIR এবং গণনা () ফলাফল নিয়ে।
পিলিপ

4
ls -l | grep -c ^dমৃত সহজ এবং কাজ করে। @ প্যাথ্রোস সম্ভবত পিএইচপি-র একটি আরও ভাল উপায় আছে তবে পিএইচপি-র মধ্যে সবচেয়ে খারাপ ক্ষেত্রে আপনি সর্বদা কমান্ড লাইন কার্যকর করতে শেল_এক্সেক () ফাংশনটি ব্যবহার করতে পারেন এবং ফলাফলকে স্ট্রিংয়ে ফিরিয়ে দিতে পারেন। অর্থাত্ $dirCount = shell_exec('ls -l | grep -c ^d');
গিগাবাইট

67

বর্তমান ডিরেক্টরিতে কেবল ডিরেক্টরিগুলির একটি গণনা পান

echo */ | wc

আপনি ভালো লাগবে 1 309 4594

2nd digitপ্রতিনিধিত্ব করে না। ডিরেক্টরি।

বা

tree -L 1 | tail -1


9
দুর্ভাগ্যক্রমে, dir নামের ফাঁকা স্থান আছে যদি এটি ব্যর্থ হয়।
মাইকেল ক্যাম্পবেল

zsh: no matches found: */নাল্ল্লোব দরকার
অ্যান ভ্যান

@AnnevanRossum কি আপনার আছে echo। প্রকারwhich echo
EmptyData

7
প্রথমটিকে আরও কিছুটা উন্নত করা যেতে পারে:echo */ | wc -w
আইবিক

নোট যে 0 এর পরিবর্তে কোনও ডিরেক্টরি না থাকলে এই 1 টি গণনা করা হবে
jinawee

28
find . -mindepth 1 -maxdepth 1 -type d | wc -l

অনুসন্ধানের জন্য -mindepthডিরেক্টরিগুলির মধ্যে মোট সংখ্যার recusive মানে

-maxdepth ডিরেক্টরিতে মোট সংখ্যার recusive মানে

-type d অর্থ ডিরেক্টরি

এবং এর জন্য wc -lইনপুটটির লাইনগুলি গণনা করুন


4
আপনার উত্তরটি দয়া করে ব্যাখ্যা করতে পারবেন (আপনার উত্তরের ভিতরে)?
জুলু

-মাইন্ডপথের অর্থ ডিরেক্টরিতে মোট সংখ্যা পুনরুদ্ধারযোগ্য, -ম্যাক্সডেপথের অর্থ ডিরেক্টরিতে মোট সংখ্যা পুনরুদ্ধারক, -প্রকার ডি মানে ডিরেক্টরি, এবং ডাব্লুসি-এল এর অর্থ প্রদত্ত ডিরেক্টরি তালিকা থেকে লাইন গণনা
শিয়ানি সুরেশ

find . -mindepth 1 -maxdepth 1 -type d | wc -lসংখ্যার মধ্যে আপনাকে অনেকগুলি স্থান দেবে, উদাহরণস্বরূপ: ` dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2 if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
2`

17

যদি আপনার কেবল ফোল্ডারে ডিরেক্টরি থাকে এবং কোনও ফাইল এটি করে না:

ls | wc -l

4
এটি ফাইলগুলিও পায় তবে প্রশ্নটি ফোল্ডার / ডিরেক্টরি সম্পর্কে ছিল।
রবার্ট

13

stat -c %h folderফলাফল থেকে 2 চালান এবং বিয়োগ করুন। এখানে অন্যান্য সমাধানগুলির (সাধারণত findপ্লাস wc) বেশিরভাগ প্রয়োজনীয় 2 (বা এমনকি 3) এর বিপরীতে এটি কেবলমাত্র একটি একক সাবসেসস নিয়োগ করে ।

শ / বাশ ব্যবহার:

cnt = $ ((`stat -c% h ফোল্ডার - 2))
প্রতিধ্বনি $ cnt # 'প্রতিধ্বনি একটি শ / বাশ অন্তর্নির্মিত, কোনও অতিরিক্ত প্রক্রিয়া নয়

Csh / tcsh ব্যবহার:

@ সিএনটি = `স্ট্যাটাস -সি% এইচ ফোল্ডার` - 2
প্রতিধ্বনি $ সিএনটি # 'প্রতিধ্বনি' একটি সিএসএস / টিসিএস বিল্ট ইন , কোনও অতিরিক্ত প্রক্রিয়া নয়


ব্যাখ্যা: stat -c %h folderথেকে hardlinks সংখ্যা ছাপে ফোল্ডারের , এবং অধীন প্রতিটি subfolder ফোল্ডারের একটি ../ এন্ট্রিতে একটি hardlink ফিরে এসেছে যা রয়েছে ফোল্ডারের । আপনাকে অবশ্যই দুটি বিয়োগ করতে হবে কারণ গণনায় দুটি অতিরিক্ত হার্ডলিঙ্ক রয়েছে:

  1. ফোল্ডারের নিজস্ব স্ব-রেফারেন্সিয়াল। / এন্ট্রি এবং
  2. ফোল্ডারের পিতামাতার লিঙ্কটি ফোল্ডারে

এই প্রশ্নের সাথে সম্পর্কিত: [কেন কোনও নতুন ডিরেক্টরিতে কিছু যুক্ত হওয়ার আগে একটি হার্ড লিঙ্কের গণনা 2 আছে? ] ( unix.stackexchange.com/questions/101515 ) এটি কেন একটি দুর্দান্ত উত্তর তা ব্যাখ্যা করে। দুর্ভাগ্যক্রমে, এটি যথেষ্ট মনোযোগ পেল না! যদিও এটি একটি ভাল উত্তর, এর ফলাফলটি দুর্ভাগ্যক্রমে ফাইল সিস্টেমের উপর নির্ভর করে, তবে বেশিরভাগ সাধারণ ফাইল সিস্টেমে এটি কাজ করবে।
কাভন্তুর

12

আপনার ড্রাইভে নেভিগেট করার সহজ উপায় এবং কেবল চালানো

ls -lR | grep ^d | wc -l

এবং উপ-ডিরেক্টরি সহ মোট ফোল্ডারগুলি অনুসন্ধান করতে চান?

find /mount/point -type d | wc -l

... অথবা রুট ডিরেক্টরিতে সমস্ত ফোল্ডার সন্ধান করবেন (উপ-ডিরেক্টরি অন্তর্ভুক্ত নয়)?

find /mount/point -maxdepth 1 -type d | wc -l

চিয়ার্স!


নোট করুন পূর্ববর্তী ls এগুলি গণনা করার -lRসময় ডট প্রিফিক্সড ডিরেক্টরিটিকে উপেক্ষা করবেন find -type dS সুতরাং আপনার যদি ডট প্রিফিক্সড ডিরেক্টরি রয়েছে (উদাহরণস্বরূপ আপনার .git উপ-ডিরেক্টরি আছে!) যদি প্রথম কমান্ডের দ্বারা দেওয়া গণনাটি ভুল হয়। আপনি কেবল ব্যবহার করতে পারবেন না -lRaকারণ আপনি প্রতিটি ডিরেক্টরিতে একটি .এবং ..প্রবেশের জন্যও পান । এটি @ পাভেল আনোসোভের উত্তরের ক্ষেত্রেও প্রযোজ্য
মার্কজ

8

আমি মনে করি সবচেয়ে সহজ

  ls -ld images/* | wc -l

imagesআপনার লক্ষ্য ডিরেক্টরিটি কোথায় ? -D পতাকা ডিরেক্টরিতে সীমাবদ্ধ করে, এবং -l পতাকা wc -lলাইন গণনার জন্য খুব পরিচিতের সাথে সামঞ্জস্য রেখে প্রতি-লাইন তালিকা সম্পাদন করবে ।


এছাড়াও ফলাফল +1
জোসেফ

4
অনুসারে man ls, -dকরে: "ডিরেক্টরিগুলি তাদের নিজের তালিকাভুক্ত নয়, তাদের বিষয়বস্তুগুলির তালিকাবদ্ধ করুন", অর্থাৎ আপনি যদি চালনা করেন তবে ls /tmpযা আছে তা পেয়ে যাবেন /tmp, এবং আপনি চালনা করলে ls -d /tmpকেবল পাবেন /tmp-dসুইচ ডিরেক্টরি ফিল্টার নয়, যেমন চাইলেন ড।
রবার্ট

5

কিছু দরকারী উদাহরণ:

বর্তমান dir মধ্যে ফাইল গণনা

/bin/ls -lA  | egrep -c '^-'

বর্তমান ডিয়ারে গণনা করুন

/bin/ls -lA  | egrep -c '^d'

বর্তমান ডিয়ারে ফাইল এবং ডায়ার গণনা করুন

/bin/ls -lA  | egrep -c '^-|^d'

একটি সাব-ডিরেক্টরিতে ফাইল এবং ডায়ার গণনা করুন

/bin/ls -lA  subdir_name/ | egrep -c '^-|^d'

আমি একটি অদ্ভুত জিনিস লক্ষ্য করেছি (কমপক্ষে আমার ক্ষেত্রে):

যখন আমি সঙ্গে চেষ্টা করেছি lsপরিবর্তে প্যারামিটার espected নয় বলে কাজ করি। আমি যখন সেই শো। / এবং ../ ব্যবহার করি তখন ফলাফলটি ভুল গণনা করে। সমাধান: পরিবর্তে/bin/ls-Ado not list implied . and ..ls/bin/lsls



3

একটি খাঁটি বাশ সমাধান:

shopt -s nullglob
dirs=( /path/to/directory/*/ )
echo "There are ${#dirs[@]} (non-hidden) directories"

আপনি যদি লুকানো ডিরেক্টরিগুলিও গণনা করতে চান:

shopt -s nullglob dotglob
dirs=( /path/to/directory/*/ )
echo "There are ${#dirs[@]} directories (including hidden ones)"

নোট করুন যে এটি ডিরেক্টরিগুলির লিঙ্কগুলিও গণনা করবে। আপনি যদি এটি না চান তবে এই পদ্ধতির সাথে এটি কিছুটা কঠিন।


ব্যবহার find:

find /path/to/directory -type d \! -name . -prune -exec printf x \; | wc -c

কৌতুকটি হ'ল xপ্রতিবার ডিরেক্টরি পাওয়া গেলে একটি স্টাডআউট আউটপুট করা এবং তারপরে wcঅক্ষরের সংখ্যা গণনা করতে ব্যবহার করুন use এটি লিঙ্কগুলি বাদ দিয়ে সমস্ত ডিরেক্টরি (লুকানো রয়েছে সহ) এর সংখ্যা গণনা করবে।


এখানে উপস্থাপিত পদ্ধতিগুলি মজার চরিত্রগুলির কাছে সমস্ত নিরাপদ অন্তর্ভুক্ত যা ফাইলের নামগুলিতে (স্পেস, নিউলাইনস, গ্লোব অক্ষর ইত্যাদি) উপস্থিত হতে পারে।


এটি এই প্রশ্নের সেরা সমাধান সমাধান এবং সর্বদা কাজ করবে!
কাওয়ানটোর

3

ব্যবহার zsh:

a=(*(/N)); echo ${#a}

Nএকটি nullglob হয়, /এটা করার দিক তুমি সরাসরি মেলে তোলে #গন্য। এটি ডিরেক্টরি নামে ফাঁকা জায়গাগুলি খুব সুন্দরভাবে মোকাবেলা করার পাশাপাশি 0ডিরেক্টরি না থাকলে ফিরতে হবে।


0

সমস্ত ফাইল এবং সাবফোল্ডার, উইন্ডো স্টাইল গণনা করুন:

dir=/YOUR/PATH;f=$(find $dir -type f | wc -l); d=$(find $dir -mindepth 1 -type d | wc -l); echo "$f Files, $d Folders"

0

আপনি যদি নিয়মিত এক্সপ্রেশন ব্যবহার করতে চান তবে চেষ্টা করুন:

ls -c | grep "^d" | wc -l

4
আপনি কি কেবল আপনার কোড-উত্তর উত্তরে কিছু ব্যাখ্যা যুক্ত করতে চান? স্ট্যাকওভারফ্লো একটি নিখরচায় কোড লেখার পরিষেবা এটি এই ভ্রান্ত ধারণার বিরুদ্ধে লড়াই করতে সহায়তা করবে। : এছাড়াও, একটি চেহারা এখানে চেহারা উন্নত করতে হবে stackoverflow.com/editing-help
Yunnosch

0

আপনি যা চান তার সর্বোত্তম উত্তর

echo `find . -maxdepth 1 -type d | wc -l`-1 | bc

এটি অবাঞ্ছিত 'অপসারণ করতে একজনকে বিয়োগ করে।' ডিরেক্টরি যা তালিকাগুলি খুঁজে পায় (উপরে উল্লিখিত প্যাটেল দেবেন হিসাবে)।

আপনি যদি সাবফোল্ডারগুলি পুনরাবৃত্তভাবে গণনা করতে চান তবে কেবল ম্যাক্সডেপথ বিকল্পটি ছেড়ে দিন

echo `find . -type d | wc -l`-1 | bc

পিএস যদি আপনি কমান্ড প্রতিস্থাপনটিকে কুৎসিত মনে করেন, একটিকে বিয়োগ করে খাঁটি প্রবাহ হিসাবে sedএবং ব্যবহার করেই করা যেতে পারে bc

একটি গণনা থেকে বিয়োগ:

find . -maxdepth 1 -type d | wc -l | sed 's/$/-1\n/' | bc

অথবা, গণনা বিয়োগ করে একটিতে:

find . -maxdepth 1 -type d | wc -l | sed 's/^/-1+/' | bc

-1

এটি করার সর্বোত্তম উপায়:

ls -la | grep -v total | wc -l

এটি আপনাকে নিখুঁত গণনা দেয়।


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