#!/bin/bash

####################

#Data:2017/7/19

####################

#set -x

#监控文件目录

INIT_PATH="/home/test/share"

#生成日志目录

FILE_DIR="/tyk"

FILE_TYPE=(reguar directory character block link  socket pipe symbolic )

FILE_MAGIC=(text/plain  inode/chardevice inode/symlink application/rtf audio/basic video/mpeg application/x-gzip  application/x-tar inode/x-empty text/x-c application/x-javascript)

EMAIL=( [email protected] )

FILE_SUF=(tar tar.gz)

FILE_TMPD="$FILE_DIR/file_tmpd"

FILE_LIST="$FILE_DIR/file_list"

FILE_LISTD="$FILE_DIR/file_listd"

FILE_LOG="$FILE_DIR/fileerror_log"

sudo dpkg -l |egrep 'sendmail|nfs-common' > /dev/null 2>&1

if [ $? -ne 0 ]

then

    sudo apt-get install sendmail -y

    sudo apt-get install mailutils  -y

    sudo apt-get install nfs-common -y

fi

filecheck=`sudo dpkg -l |grep inotify-tools|awk '{print $2}'`

if [ -z $filecheck ]

then

    sudo apt-get install rsync inotify-tools -y

fi

file_package(){

mkdir tmp

case $1 in

application/x-tar)

tar -xvf $2"/"$file -C $2"/"tmp

;;

application/x-gzip)

gunzip -d $2"/"tmp

;;

application/zip)

   unzip $2"/"$file -d $2"/"tmp

;;

esac


}


read_dir(){  

    for file in ` ls $1 `  

    do  

        if [ -d $1"/"$file ]  

        then  

    echo $1"/"$file >> $FILE_TMPD

    

             read_dir $1"/"$file  

        else 

    file -i  $1"/"$file >> $FILE_LIST

    file_T=`file -i  $1"/"$file|awk '{print $2}'|cut -d";" -f1`

    file_package $file_T $1 $file

        fi  

    done  

}

send_email(){

filename=$1

send_message="NIFO:    $filename file type is not supported, Please check....,Thanks!!!  -there are $2 files have a problem --"

date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")

echo "`date +'%Y-%m-%d %H:%M:%S'`      $send_message " >> $FILE_LOG

for email1 in ${EMAIL[@]}

do

echo "$send_message" |mail -s "check file"  $email1

wait


done

file_check(){

file_num=0

file_act=$1

file_typ=$2

echo $file_typ

number=`cat $file_act |wc -l`

        for i in `seq $number`

        do

                file_reg=0

                file_type=`cat $file_act |sed -n "$i"p|awk '{print $2}'|cut -d";" -f1`

                for filetype in ${file_typ[@]}

                do

                        if [ "$file_type"  = "$filetype" ]

                        then

                                file_reg=1

break 1

                        fi

                done

                if [ "$file_reg" -eq "0" ]

                then

                        let file_num+=1

                        filename=`cat $file_act |sed -n "$i"p|cut -d" " -f1`

                        send_email $filename $file_num

                fi

        done


}

send_info(){

file_dir=$FILE_DIR/file_dir

file_doc=$FILE_DIR/file_doc

sort $FILE_LISTD|uniq > $file_dir 

sort $FILE_LIST|uniq > $file_doc

for file in $file_dir $file_doc

do

if [ "$file" = "$file_dir" ] 

then

file_check $file "${FILE_TYPE[*]}"

else

file_check $file "${FILE_MAGIC[*]}"

fi

done 

}

file_view(){

       m=0

        /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e create,modify,attrib,move $INIT_PATH | while read files

            do

                let m+=1

                echo "file has been change....$m..."

read_dir $INIT_PATH

file -f $FILE_TMPD > $FILE_LISTD

send_info 

#rm -fr $FILE_DIR/file_*

            done

}

file_view