计算特定目录中的目录数量

如何计算特定目录中文件夹的数量。 我正在使用下面的命令,但它总是提供一个额外的。

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

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

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 

你可以改为testing一下目录的子目录,而不要下载它们:

 $ 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 

只计算当前目录中的目录

echo */ | wc

你会得到像1 309 4594

2nd digit代表没有。 的目录。

要么

tree -L 1 | tail -1

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

find -mindepth表示在目录中recusive的总数

-maxdepth表示在目录中-maxdepth总数

-type d表示目录

对于wc -l表示计数input的行数

导航到您的驱动器,最好的方法就是执行

 ls -lR | grep ^d | wc -l 

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

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

…或find根目录中的所有文件夹(不包括子目录)?

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

干杯!

我觉得最简单的是

  ls -ld images/* | wc -l 

images是你的目标目录。 -d标志限制目录,-l标志将执行每行列表,与非常熟悉的wc -l兼容。

运行stat -c %h folder并从结果中减去2。 这只使用一个subprocess,而不是大多数其他解决scheme所需的2个(甚至3个)subprocess(通常是加上wc )。

说明: stat -c %h打印硬链接到folder的数量,并且文件夹下的每个子folder包含一个../条目,这是一个硬连接返回到folder 。 您必须减去2,因为stat -c %h folder包含两个额外的硬连接:

  1. subfolder自己的自我指涉./条目,和
  2. subfolder的父级链接到subfolder

纯粹的bash解决scheme:

 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 

诀窍是每find一个目录就输出一个x到stdout,然后用wc来计算字符数。 这将计算所有目录(包括隐藏的)的数量,不包括链接。


这里介绍的方法对可能出现在文件名(空格,换行符,水平字符等)中的有趣的字符都是安全的。

使用zsh

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

N是一个nullglob, /使它匹配目录, #计数。 它将整齐地处理目录名称中的空格,并在没有目录的情况下返回0

统计所有文件和子文件夹,Windows风格:

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

最好的方法来做到这一点:

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

这给你一个完美的数字。