计算特定目录中的目录数量
如何计算特定目录中文件夹的数量。 我正在使用下面的命令,但它总是提供一个额外的。
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
这给你一个完美的数字。