逐个打印每个子文件夹的文件数

时间:2018-10-01 07:03:01

标签: linux shell scripting data-cleaning data-cleansing

我具有以下文件夹结构:

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的文件计数的值。

使用评估方法:我可以进行硬编码并获得准确的结果。但是,我希望它以某种方式显示给我前一天的数据。这就是我所做的:

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)"'

上面的行中我缺少什么吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

其他一些注意事项: