How to do it...

To enumerate file type statistics, follow these steps:

  1. To print the type of a file, use the following command:
        $ file filename

        $ file /etc/passwd
        /etc/passwd: ASCII text
  1. Print the file type without the filename:
        $ file -b filename
        ASCII text
  1. The script for file statistics is as follows:
     #!/bin/bash 
     # Filename: 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 

The usage is as follows:

        $ ./filestat.sh /home/slynux/temp
  1. A sample output is shown as follows:
        $ ./filetype.sh /home/slynux/programs
        ============ File types and counts =============
        Vim swap file : 1
        ELF 32-bit LSB executable : 6
        ASCII text : 2
        ASCII C program text : 10