摘要
tony, 你看ffmpeg的源码目录下有很多x86的文件还有ppc的文件,能不能帮我统计一下,然后放在execl表格里,要统计
1、总共有多少各x86和ppc目录,
2、每个目录有多少文件
3、每个目录有多少各c文件
这可如何是好,开动脑筋,思考一下,
遍历文件莫过find命令,假设每个目录一列,那就要用paste进行列粘贴,能让execl识别的文件,csv文件是不错的选择,好接下来一个问题一个问题解决。
查找目录
# find ./ -name 'x86' -type d
./libavfilter/x86
./libswscale/x86
./libavresample/x86
./libswresample/x86
./libavutil/x86
./libavcodec/x86
# find ./ -name 'ppc' -type d
./libswscale/ppc
./libavutil/ppc
./libavcodec/ppc
还行,ffmpeg下就这几个x86和ppc的目录,手指头都能数过来,
find 命令简单介绍,
./ 是之在什么目录下进行查找
-name ‘x86’ 是指定被查找的对象
-type d 查找的类型为目录
如果想查找文件就用 -type f
查找每个目录下的文件
虽然目录不多,如果用ls去遍历每个目录,手指有点类啊,
简单而重复的工作就让机器去做吧,上demo
#!/bin/bash
for alldir in x86 ppc
do
ds=$( find ./ -name "${alldir}" -type d )
for d in ${ds[@]}
do
echo "$d"
find $d -name '*.c' -type f
done
done
第一层for循环为了是遍历两个目录
第二层循环是为乐遍历每个目录下的文件,这次我先找后缀为点c文件
如果想找所有文件,就将点c去掉,只留一个星号
./libavfilter/x86
./libavfilter/x86/vf_spp.c
./libavfilter/x86/vf_gradfun_init.c
./libavfilter/x86/vf_hqdn3d_init.c
./libavfilter/x86/vf_tinterlace_init.c
./libavfilter/x86/vf_pullup_init.c
......
./libavcodec/ppc/vorbisdsp_altivec.c
./libavcodec/ppc/mpegvideo_altivec.c
./libavcodec/ppc/h264chroma_template.c
./libavcodec/ppc/dct-test.c
./libavcodec/ppc/huffyuvdsp_altivec.c
./libavcodec/ppc/audiodsp.c
./libavcodec/ppc/vp8dsp_altivec.c
./libavcodec/ppc/h264qpel_template.c
./libavcodec/ppc/blockdsp.c
./libavcodec/ppc/h264chroma_init.c
./libavcodec/ppc/lossless_audiodsp_altivec.c
./libavcodec/ppc/vc1dsp_altivec.c
文章篇幅有限,中间略去一些,
目录找到了,文件也找到了,该怎样转成execl文件呢,难不成要一个一个粘贴进去吗,
制作csv文件
最烦复制粘贴了,还是让程序去做吧
#!/bin/bash
> a.tmp
> b.tmp
> c.tmp
for alldir in x86 ppc
do
ds=$( find ./ -name "${alldir}" -type d )
for d in ${ds[@]}
do
echo "$d"
find $d -name '*.c' -type f > a.tmp
paste -d ',' b.tmp a.tmp > c.tmp
mv c.tmp b.tmp
done
done
mv b.tmp b.csv
最上面三行是为了一开始创建3个临时文件,
首先将遍历到的目录中文件信息保存到a.tmp文件中,
用paste 命令,以逗号为分割符,将a.tmp文件中的每列粘贴到b.tmp的后面,然后保存到c.tmp中,csv文件,大多是以逗号为分割符的
将c.tmp再修改为b.tmp方便下次合并b.tmp 和a.tmp ,
依次这样循环下去,最后结束时,将b.tmp 改名未b.csv,这就是我们要的csv文件,放到execl中酒可以识别了。
有图有真相
总结:
简单重复的事情就让机器去做吧。