如何计算特定目录中的文件夹数.我使用以下命令,但它总是提供额外的命令.
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
小智 24
find . -mindepth 1 -maxdepth 1 -type d | wc -l
Run Code Online (Sandbox Code Playgroud)
对于find,-mindepth
表示目录中的重复总数
-maxdepth
表示目录中的重复总数
-type d
表示目录
并且wc -l
意味着计算输入的行数
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)
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,因为计数中还有两个额外的硬链接:
我认为最简单的是
ls -ld images/* | wc -l
Run Code Online (Sandbox Code Playgroud)
images
你的目标目录在哪里.-d标志限制目录,-l标志将执行每行列表,与非常熟悉wc -l
的行计数兼容.
一些有用的例子:
计算当前目录中的文件
/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
归档时间: |
|
查看次数: |
170180 次 |
最近记录: |