首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写脚本来计数主目录中的文件总数和目录,然后显示它?

如何编写脚本来计数主目录中的文件总数和目录,然后显示它?
EN

Unix & Linux用户
提问于 2015-11-10 00:05:51
回答 2查看 20.8K关注 0票数 3

我想用一个for循环来完成它。这就是我到目前为止想出的不起作用的东西。

代码语言:javascript
复制
for home in /home/ {.,/}*; do echo "$home"; done

如果可能的话,我想不递归地做这件事。

EN

回答 2

Unix & Linux用户

发布于 2015-11-10 05:17:12

对于不递归的当前目录中的非目录类型,使用find

代码语言:javascript
复制
find . ! -name . -prune ! -type d | grep -c /

...for只有目录删除第二个or,或者对于所有的文件类型,完全删除-type测试。

在这种情况下,这很容易,因为没有递归,我们只能看到每个文件只有一个路径分隔符,因此对于计数的内容和位置没有任何混淆。当你应该计算文件时,计算换行符会导致麻烦--这两件事是不相关的。否则该怎么办呢?

代码语言:javascript
复制
find .//. | grep -c '^\.//\.'

...will返回根植于当前目录的子对象的精确计数。

同样有效,但使用反向逻辑,因为它在内部引用换行符,而且可能更快,因为它只需要stat()每个目录,而不是每个组成文件:

代码语言:javascript
复制
\ls -1qRA . | grep -Exc \[^/]+

如果您将-R选项删除到ls中,那么它也将在没有递归的情况下工作。

不过,上面可能会根据文件名中的多字节字符和不兼容的区域设置返回一个假计数。将LC_ALL=C放在符合POSIX的ls's环境中将防止这种情况发生,对于一棵相当大的树的深度计数来说,这样做毕竟只会在性能方面有所帮助。

票数 3
EN

Unix & Linux用户

发布于 2015-11-10 04:26:13

使用发现

当您非递归地说时,是否意味着您只需要/home中的文件/目录的计数,而不需要任何子目录?如果是这样的话,您可以使用maxdepth选项将结果限制在顶层。

代码语言:javascript
复制
find /home -maxdepth 1 | wc -l

用于:

代码语言:javascript
复制
i=0; for home in ~/*; do (( i++ )); done; echo $i

注意双括号和封闭的i++之间的空格。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/242002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档