您的位置:首页 > 运维架构 > Shell

Shell脚本列举文件类型统计信息

2015-03-09 17:36 351 查看
生成文件统计信息的脚本如下:

#!/bin/bash
#文件名:filestat.sh
#实现从指定路径目录的多个文件中收集文件类型统计的信息,输出每种类型文件的数量

if [ $# -ne 1 ];
then
echo "Usage is $0 basepath";
exit
fi
path=$1

declare -A statarray;
#类型 与对应的数量信息存储在关联数组中
while read line;
do
ftype=`file -b "$line" | cut -d, -f1`
let statarray["$ftype"]++;

done < <(find $path -type f -print)

echo ===============File types and counts====
for ftype in "${!statarray[@]}";
do
echo $ftype : ${statarray["$ftype"]}
done


说明如下:

1,ftype=`file -b "$line" | cut -d, -f1`

使用file 命令可以打印文件类型信息。使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。

file能识别的文件类型:目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。在Linux系统中,文件类型根据文件的权限以及文件内容类型来划分的。在linux中文件本身是不需要后缀名称的,我们习惯上添加后缀名称仅仅是便于直观了解这是哪种用途类型。

使用-b选项 打印不包括文件名在内的文件类型信息 注意打印的信息中我们只需要提取出第一个字段即可 故使用cut -d, -f1来指明以逗号为定界符,并且只打印第一个字段

2.declare -A statarray;

声明关联数组 数组的键为提取的第一个字段 值为这种类型文件的个数

3.done < <(find $path -type f -print)

find命令可以通过查看文件内容来找出指定类型的文件 <(find $path -type f -print)相当于文件名,它用子进程输出来代替文件名 注意 第一个<用于重定向 第二个<用于将子进程的输出装换成文件名

4. ${!statarray[@]}

用于返回一个数组索引列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: