我有以下文件夹结构:
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
请注意,字母后面的值为 00、01 至 23 24 个文件夹的文件计数值。
使用 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)"'
最佳答案
类似这样的东西(未测试):
for d in [A-Z]/[A-Z]/[A-Z]/[A-Z]/[A-Z]/[0-9][0-9]
do
[[ -d $d ]] && echo $d : $(ls $d|wc -l)
done
请注意,如果其中一个文件名包含换行符,则会给出不正确的行数。
关于linux - 在shell脚本中迭代打印特定格式的文件数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52424386/