linux - 在shell脚本中迭代打印特定格式的文件数

标签 linux bash shell data-cleaning

我有以下文件夹结构:

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/

相关文章:

bash - <<END_SCRIPT 同时通过 bash 连接到 FTP

linux - 使用 Shell 通过 ssh 从远程机器收集 Full GC 计数

linux - 如何获取加载的内核模块文件位置

bash - 使用 unshare 在现有网络命名空间中启动进程?

linux - 我的 init.d 服务无法识别

linux - 如何编写 shell 脚本以从 sar 报告中查找 ram 利用率的最小最大值和平均值

linux - 带 sudo 的管道命令

使用 tar 查找差异的 c 代码

linux - 如何列出安装在使用 oe-core 构建的目标 rootfs 中的包?

linux - 禁用 Gnome 3 通知/弹出窗口/集成通知