迭代打印每个子文件夹的文件数

print the count of files for each sub folder iterativly

我有以下文件夹结构:

A/B/C/D/E/00
A/B/C/D/E/01
.
.
A/B/C/D/E/23

同样,

M/N/O/P/Q/00
M/N/O/P/Q/01
.
.
M/N/O/P/Q/23

现在,从00到23的每个文件夹里面都有很多文件,我要数一数。

如果我运行这个简单的命令:

ls /A/B/C/D/E/00 | wc -l 我可以获得每个子目录中的文件数。我想自动执行此操作或迭代获取它。 此外,我正在查看的最终输出是一个应该如下所示的文件:

C E RESULT OF ls /A/B/C/D/E/00 | wc -l RESULT OF ls /A/B/C/D/E/01 | wc -l
M Q RESULT OF ls /M/N/O/P/Q/00 | wc -l RESULT OF ls /M/N/O/P/Q/01 | wc -l

所以,最终的输出应该是这样的

C E 23 23 4 6  7  4 76 98 57 2 67 9 12 34 67 0 2 3  78 98 12 3  57 213
M Q 12 10 2 34 32 1 35 65 87 8 32 2 65 87 98 0 4 12 1  35 34 76 9  67

请注意,字母后面的值是24个文件夹00、01到23的文件计数值。

使用 eval 方法:我可以硬编码并获得准确的结果。但是,我希望它能够显示前一天的数据。所以这就是我所做的:

d=`date --date ="1 days ago" +%Y%m%d`
month= `date +%Y%m`
eval echo YZ $d '"$(ls "/A/B/YZ/$month/$d/"'{20150800..20150823})'| wc -l)"'

这非常有效,因为在给定位置,子目录 20150800、20150801..20150823 中有文件。但是,当我尝试像下面这样概括时,它没有显示这样的文件或目录:

eval echo YZ $d '"$(ls "/A/B/YZ/$month/$d/"'{"$d"00.."$d"23})'| wc -l)"'

我在上面的行中遗漏了什么吗?

一种非常安全的文件计数方式:

find . -mindepth 1 -exec printf x \; | wc -c

要不递归计数,请在 -exec 之前添加 -maxdepth 1

一些其他注意事项: