计算特定目录中的目录数

use*_*898 88 linux bash

如何计算特定目录中的文件夹数.我使用以下命令,但它总是提供额外的命令.

find /directory/ -maxdepth 1 -type d -print| wc -l
Run Code Online (Sandbox Code Playgroud)

例如,如果我有3个文件夹,则此命令提供4.如果它包含5个文件夹,则该命令提供6.为什么?

Pav*_*sov 84

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
Run Code Online (Sandbox Code Playgroud)

您可以改为测试目录的子节点,而不是完全插入它们:

$ 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
Run Code Online (Sandbox Code Playgroud)

您还可以使用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
Run Code Online (Sandbox Code Playgroud)


Emp*_*ata 56

只计算当前目录中的目录

echo */ | wc

你会得到像 1 309 4594

2nd digit代表没有.目录.

要么

tree -L 1 | tail -1

  • 如果dir名称中有空格,则会失败. (7认同)
  • 第一个可以进一步改进:`echo*/| wc -w` (7认同)

小智 24

find . -mindepth 1 -maxdepth 1 -type d | wc -l
Run Code Online (Sandbox Code Playgroud)

对于find,-mindepth表示目录中的重复总数

-maxdepth 表示目录中的重复总数

-type d 表示目录

并且wc -l意味着计算输入的行数

  • 你能解释一下你的答案(在答案里面)吗? (2认同)

Man*_*ava 12

导航到您的驱动器并简单执行的最佳方式

ls -lR | grep ^d | wc -l
Run Code Online (Sandbox Code Playgroud)

并查找所有文件夹,包括子目录?

find /mount/point -type d | wc -l
Run Code Online (Sandbox Code Playgroud)

...或找到根目录中的所有文件夹(不包括子目录)?

find /mount/point -maxdepth 1 -type d | wc -l
Run Code Online (Sandbox Code Playgroud)

干杯!


Bra*_*iac 12

如果文件夹中只有目录,而没有文件,则可以这样做:

ls | wc -l
Run Code Online (Sandbox Code Playgroud)

  • 这也会获取文件,但问题是关于文件夹/目录。 (2认同)

tex*_*ral 11

stat -c %h folder从结果中运行并减去2.这仅使用单个子过程,而不是此处大多数其他解决方案所需的2(或甚至3)(通常为find加号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打印文件夹的硬链接数,文件夹下的每个子文件夹都包含一个../条目,这是一个返回文件夹的硬链接.您必须减去2,因为计数中还有两个额外的硬链接:

  1. 文件夹自己的自我引用./ entry,和
  2. 文件夹的父文件夹链接


bri*_*urg 8

我认为最简单的是

  ls -ld images/* | wc -l
Run Code Online (Sandbox Code Playgroud)

images你的目标目录在哪里.-d标志限制目录,-l标志将执行每行列表,与非常熟悉wc -l的行计数兼容.


小智 8

我们可以使用以下命令找到的目录数

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


Aru*_*dev 6

要获取目录数 - 导航到该目录并执行

 ls -l | grep -c ^d
Run Code Online (Sandbox Code Playgroud)


MTK*_*MTK 5

一些有用的例子:

计算当前目录中的文件

/bin/ls -lA  | egrep -c '^-'
Run Code Online (Sandbox Code Playgroud)

计算当前目录中的目录

/bin/ls -lA  | egrep -c '^d'
Run Code Online (Sandbox Code Playgroud)

计算当前目录中的文件和目录

/bin/ls -lA  | egrep -c '^-|^d'
Run Code Online (Sandbox Code Playgroud)

计算一个子目录中的文件和目录

/bin/ls -lA  subdir_name/ | egrep -c '^-|^d'
Run Code Online (Sandbox Code Playgroud)

我注意到一件奇怪的事情(至少在我的情况下):

当我与尝试ls,而不是/bin/ls-A参数do not list implied . and ..无法正常工作espected。当我使用 ls那个 show ./ 和 ../ 所以结果错误计数。解决方案:/bin/ls相反ls