计算特定目录中的目录数量
如何计算特定目录中文件夹的数量。 我正在使用下面的命令,但它总是提供一个额外的。
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
包含两个额外的硬连接:
-
subfolder
自己的自我指涉./条目,和 -
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
这给你一个完美的数字。