查找有特定文件的子目录 --- ls命令的妙用

时间:2022-07-17 12:09:02

问题描述 在目录“/data/”下有非常多的子目录(一千个左右),目录名是类型名称,每个小时产生的数据按类型区分写入到对应的子目录中,文件命名方式是“yyyymmddhh”,每个子目录中的文件数平均约500个。一小时内不一定每总类型的数据都有,也就是说有些子目录下没有那个小时的数据文件的。现在的需求是:整点定时出一份上一小时有数据的类型名称列表,一行一个类型名称(子目录名)写入一个文本文件中

/data/
|-- type_1
|   |-- 2013061809
|   |-- 2013061808
|-- type_2
|   |-- 2013061808

问题分析 此问题看粗看起来很简单,只要循环的判断所有子目录是否存在上个小时的数据文件就可以了。功能是完全没问题的,但代码总感觉有点罗嗦,性能似乎也不是很好。于是寻找到了更优的解决方案,主要是ls结合通配符的一个妙用,大家一看就明白
ls -1 /data/*/`date -d -30minutes +%Y%m%d%H`|awk -F"/" '{print $3}' >  /tmp/list.txt