it-swarm.dev

حساب عدد الدلائل في دليل محدد

كيفية حساب عدد المجلدات في دليل محدد. أنا أستخدم الأمر التالي ، لكنه يوفر دائمًا أمرًا إضافيًا.

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

على سبيل المثال ، إذا كان لدي 3 مجلدات ، فإن هذا الأمر يوفر 4. إذا كان يحتوي على 5 مجلدات ، فإن الأمر يوفر 6. لماذا هذا؟

72
user2566898

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
75
Pavel Anossov

الحصول على عدد الدلائل فقط في الدليل الحالي

echo */ | wc

سوف تخرج مثل 1 309 4594

2nd digit يمثل لا. الدلائل.

أو

tree -L 1 | tail -1

46
EmptyData
find . -mindepth 1 -maxdepth 1 -type d | wc -l

للعثور على -mindepth يعني العدد الإجمالي recusive في الدلائل

-maxdepth يعني العدد الإجمالي recusive في الدلائل

-type d يعني الدليل

وللحصول على wc -l يعني حساب أسطر الإدخال

18
shiyani suresh

أفضل طريقة للتنقل إلى محرك الأقراص الخاص بك وتنفيذ ببساطة

ls -lR | grep ^d | wc -l

وللعثور على جميع المجلدات في المجموع ، بما في ذلك الدلائل الفرعية؟

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

... أو العثور على جميع المجلدات في الدليل الجذر (وليس بما في ذلك الدلائل الفرعية)؟

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

في صحتك!

13
Manish Shrivastava

أعتقد أن الأسهل هو

  ls -ld images/* | wc -l

حيث images هو دليلك المستهدف. حدود العلم -d إلى الدلائل ، وسوف تؤدي العلامة -l قائمة لكل سطر ، متوافقة مع wc -l المألوف للغاية لعدد الأسطر.

10
briceburg

قم بتشغيل stat -c %h folder وطرح 2 من النتيجة. يستخدم هذا عملية فرعية واحدة فقط بدلاً من 2 (أو حتى 3) المطلوبة من قبل معظم الحلول الأخرى هنا (عادة find plus wc).

باستخدام sh/bash:

cnt = $ ((`stat -c٪ h folder` - 2))
echo $ cnt # "echo" عبارة عن نظام مدمج sh/bash ، وليس عملية إضافية

باستخدام csh/tcsh:

@ cnt = `stat -c٪ h folder` - 2
echo $ cnt # "echo" هو csh/tcsh مدمج ، وليس عملية إضافية


التفسير: stat -c %h folder يطبع عدد الارتباطات الثابتة إلى folder ، وكل مجلد فرعي ضمن folder يحتوي على إدخال ../ وهو ارتباط ثابت إلى folder . يجب طرح 2 نظرًا لوجود ارتباطين إضافيين في الحساب:

  1. folder 's المرجعية الذاتية./الإدخال و
  2. folder الوالد الوصل إلى folder
8
textral

هل هذا العمل:

ls | wc -l
5
Brainmaniac

بعض الأمثلة المفيدة:

عدد الملفات في دير الحالي

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

عد dirs في دير الحالي

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

عد الملفات و dirs في دير الحالي

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

عد الملفات و dirs في دليل فرعي واحد

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

لقد لاحظت شيئًا غريبًا (على الأقل في حالتي):

عندما جربت استخدام ls بدلاً من ذلك ، /bin/ls ، فإن المعلمة -Ado not list implied . and .. لا تعمل على النحو المحدد. عندما أستخدم ls التي تظهر ./ و ../ بحيث ينتج عنها عدد خاطئ. SOLUTION: /bin/ls بدلاً من ذلك ls

4
MTK

حل باش النقي:

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 لحساب عدد الأحرف. سيؤدي هذا إلى حساب عدد الدلائل (بما في ذلك الدلائل المخفية) ، باستثناء الروابط.


تعتبر الطرق المقدمة هنا جميعها آمنة للأحرف المضحكة التي يمكن أن تظهر في أسماء الملفات (المساحات ، الأسطر الجديدة ، الأحرف العالمية ، إلخ).

2
gniourf_gniourf

باستخدام zsh:

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

N هو nullglob ، / يجعله يطابق الدلائل ، # مهم. سيتعامل بدقة مع المسافات في أسماء الدليل بالإضافة إلى إرجاع 0 إذا لم تكن هناك أدلة.

1
Anne van Rossum

باستخدام التعبيرات العادية.

ls -c | grep "^ d" | مرحاض

0
makassi

عد جميع الملفات والمجلدات الفرعية ونمط النوافذ:

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
margenn

التمتع ألعاب الطفولة مرة أخرى:

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

هذا يمنحك العد المثالي.

0
Manoj