我具有以下文件夹结构:
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)"'
上面的行中我缺少什么吗?
答案 0 :(得分:2)
一种非常安全的文件计数方式:
find . -mindepth 1 -exec printf x \; | wc -c
要不进行递归计数,请在-maxdepth 1
之前添加-exec
。
其他一些注意事项:
eval
是邪恶的。不要使用它。我只见过一个合适的地方,那就是使用getopt
时。ls
。$()
for command substitutions。