Answers:
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
$ ls -l .vim
使用PHP 做到这一点?或如何只获取总数,而没有列表。我的意思是,在这种情况下只能得到52
?
(ls).Count
ls -l | grep -c ^d
很简单,很有效。@Pathros在PHP中可能是更好的方法,但是在PHP中,最坏的情况是您始终可以使用shell_exec()函数执行命令行并将结果返回到字符串。即 $dirCount = shell_exec('ls -l | grep -c ^d');
仅获取当前目录中的目录数
echo */ | wc
你会把像 1 309 4594
2nd digit
代表不。目录。
要么
tree -L 1 | tail -1
zsh: no matches found: */
需要nullglob
echo
。类型which echo
echo */ | wc -w
find . -mindepth 1 -maxdepth 1 -type d | wc -l
对于查找-mindepth
意味着目录中可恢复的总数
-maxdepth
表示目录中可恢复的总数
-type d
指目录
对于wc -l
均值,计算输入的行数
find . -mindepth 1 -maxdepth 1 -type d | wc -l
会在数字之间给您很多空格,例如:` dir_count=`find . -maxdepth 1 -type d | wc -l | xargs`; echo $dir_count # will print just 2
if (( $dir_count > 1 )); then echo "Yaa"; fi # will print "Yaa"
导航到驱动器并简单执行的最佳方法
ls -lR | grep ^d | wc -l
并查找总计所有文件夹,包括子目录?
find /mount/point -type d | wc -l
...或找到根目录中的所有文件夹(不包括子目录)?
find /mount/point -maxdepth 1 -type d | wc -l
干杯!
-lR
在对点前缀目录进行find -type d
计数时会忽略它们,因此如果您具有点前缀目录(例如,您有.git子目录!),则第一个命令给出的计数是错误的。您不能简单地使用, -lRa
因为您还会获得每个目录.
和..
条目。它也适用于@Pavel Anossov的答案
运行stat -c %h folder
并从结果中减去2。与此处大多数其他解决方案(通常为find
plus wc
)所需的2(或什至3)相反,此方法仅使用一个子过程。
使用sh / bash:
cnt = $(((stat -c%h folder`-2))
echo $ cnt#'echo'是一个sh / bash内置函数,不是一个额外的过程
使用csh / tcsh:
@ cnt =`stat -c%h文件夹`-2
echo $ cnt#'echo'是内置的csh / tcsh,不是一个额外的过程
说明:stat -c %h folder
打印到文件夹的硬链接数,并且文件夹下的每个子文件夹都包含一个../条目,该条目是回到文件夹的硬链接。您必须减去2,因为计数中还有两个附加的硬链接:
一些有用的例子:
计算当前目录中的文件
/bin/ls -lA | egrep -c '^-'
计算当前目录中的目录
/bin/ls -lA | egrep -c '^d'
计算当前目录中的文件和目录
/bin/ls -lA | egrep -c '^-|^d'
在一个子目录中计数文件和目录
/bin/ls -lA subdir_name/ | egrep -c '^-|^d'
我注意到了一件奇怪的事情(至少在我看来):
当我与尝试
ls
,而不是/bin/ls
该-A
参数do not list implied . and ..
无法正常工作espected。当我使用ls
show ./和../时,导致计数错误。解决方案:/bin/ls
代替ls
一个纯bash解决方案:
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
每次找到目录时将一个输出输出到stdout,然后使用wc
该计数来计算字符数。这将计算所有目录(包括隐藏目录)的数量,不包括链接。
此处介绍的方法都是可以安全出现在文件名中的有趣字符(空格,换行符,glob字符等)。
使用zsh
:
a=(*(/N)); echo ${#a}
该N
是了nullglob,/
使得它匹配的目录,#
计数。它将巧妙地处理目录名称中的空格,0
并在没有目录的情况下返回。
如果要使用正则表达式,请尝试:
ls -c | grep "^d" | wc -l
想要的最好的答案是
echo `find . -maxdepth 1 -type d | wc -l`-1 | bc
这减去一个即可删除不需要的“。” 查找列表的目录(如上面提到的patel deven)。
如果您想递归计算子文件夹,则不要使用maxdepth选项,因此
echo `find . -type d | wc -l`-1 | bc
PS:如果您发现命令替换很难看,则可以使用sed
和减去一个纯流bc
。
从计数中减去一个:
find . -maxdepth 1 -type d | wc -l | sed 's/$/-1\n/' | bc
或者,将计数加减一:
find . -maxdepth 1 -type d | wc -l | sed 's/^/-1+/' | bc