在UNIX上计算目录

时间:2014-09-11 20:23:56

标签: bash unix

我需要一个bash脚本,可以计算FreeBSD上其他目录中的目录。 案件是这样的: 路径为home/myuser/direct,而不是在此目录中,有20个目录只用一个字母命名,如A B C D E F,依此类推。在每个A目录中,B目录中有许多其他名称不同的目录,例如mydirectory1,mydirectory2等。在mydirectory1里面有不同的文件和目录,我只需要计算mydirectory1下的目录,而不是文件。我想出了这个,但是使用它,我必须为每个目录手动执行此操作:

home/myuser/direct# ls -l A/* | grep ^d | wc -l 

而不是B目录我将不得不:

home/myuser/direct# ls -l B/* | grep ^d | wc -l

等等。有没有办法,自动执行此操作,我的意思是将字母A更改为B,依此类推?

P.S,对于混淆感到抱歉,因为英语不是我的第一语言:(

2 个答案:

答案 0 :(得分:1)

尝试

find * -type d -print | wc -l

答案 1 :(得分:1)

此解决方案假定您需要当前目录中每个文件夹的子文件夹数。如果你想把它们总结为一个值,那就是一个不同的问题......对于文件夹名称的变化,它不是令人难以置信的健壮,但是对于大多数没有奇怪标点符号的情况应该适用:

for D in */; do echo "$D": $(ls -d "$D"*/| wc -l); done

示例输出:

DATA/: 14
LOGS/: 2
PLOTS/: 3
SCRIPTS/: 2
ls: libraries//*/: No such file or directory
libraries/: 0

这是一个抑制空文件夹错误的版本:

for D in */; do echo "$D": $(ls -d "$D"*/ 2>/dev/null |wc -l); done