Home > BashScripts > check how many files in a directory

check how many files in a directory

Script to count how many files exists in directory and subdirectories
based on Gerd Stammwitz original script.

#!/bin/sh
#
# ## Plugin for Nagios to monitor directory size
# ## Written by Gerd Stammwitz (http://www.enbiz.de/)
# ##
# ## - 20040727 coded and tested for Solaris and Linux
# ## - 20041216 published on NagiosExchange
# ## - 20070710 modified by Jose Vicente Mondejar to add perfdata option
# ## - 20130707 modified by Felipe Ferreira to count number of files in directory
#
#
# ## You are free to use this script under the terms of the Gnu Public License.
# ## No guarantee - use at your own risc.
#
#
# Usage: ./check_dirsize -d  -w  -c 
#
# ## Description:
#
# This plugin determines the number of iles inside a a directory (including sub dirs)
# and compares it with the supplied thresholds.

#PATH=""

LS="/bin/ls"
CUT="/usr/bin/cut"
WC="/usr/bin/wc"
GREP="/bin/grep"
FIND="/usr/bin/find"

PROGNAME=`$0`
PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
REVISION="Revision 1.1"
AUTHOR="(c) 2004,2007 Gerd Stammwitz (http://www.enbiz.de/)"

# Exit codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

print_revision() {
    echo "$REVISION $AUTHOR"
}

print_usage() {
    echo "Usage: $PROGNAME -d|--dirname  [-w|--warning ] [-c|--critical ] [-f|--perfdata]"
    echo "Usage: $PROGNAME -h|--help"
    echo "Usage: $PROGNAME -V|--version"
    echo ""
    echo " and  must be expressed in KB"
}

print_help() {
    print_revision $PROGNAME $REVISION
    echo ""
    echo "Directory size monitor plugin for Nagios"
    echo ""
    print_usage
    echo ""
}

# Make sure the correct number of command line
# arguments have been supplied

if [ $# -lt 1 ]; then
    print_usage
    exit $STATE_UNKNOWN
fi

# Grab the command line arguments

thresh_warn=""
thresh_crit=""
perfdata=0
exitstatus=$STATE_WARNING #default
while test -n "$1"; do
    case "$1" in
        --help)
            print_help
            exit $STATE_OK
            ;;
        -h)
            print_help
            exit $STATE_OK
            ;;
        --version)
            print_revision $PROGNAME $VERSION
            exit $STATE_OK
            ;;
        -V)
            print_revision $PROGNAME $VERSION
            exit $STATE_OK
            ;;
        --dirname)
            dirpath=$2
            shift
            ;;
        -d)
            dirpath=$2
            shift
            ;;
        --warning)
            thresh_warn=$2
            shift
            ;;
        -w)
            thresh_warn=$2
            shift
            ;;
        --critical)
            thresh_crit=$2
            shift
            ;;
        -c)
            thresh_crit=$2
            shift
            ;;
        -f)
            perfdata=1
            ;;
        -perfdata)
            perfdata=1
            ;;
        *)
            echo "Unknown argument: $1"
            print_usage
            exit $STATE_UNKNOWN
            ;;
    esac
    shift
done

##### Get size of specified directory

error=""
duresult=`$FIND $dirpath -type f |$WC -l || error="Error"`

if [ ! "$error" = "" ]; then
    errtext=`echo $duresult`
    echo "$error:$errtext"
    exit $STATE_UNKNOWN
fi

dirsize=`echo $duresult`
result="OK"
exitstatus=$STATE_OK

##### Compare with thresholds

if [ "$thresh_warn" != "" ]; then
    if [ $dirsize -ge $thresh_warn ]; then
        result="WARNING"
        exitstatus=$STATE_WARNING
    fi
fi
if [ "$thresh_crit" != "" ]; then
    if [ $dirsize -ge $thresh_crit ]; then
        result="CRITICAL"
        exitstatus=$STATE_CRITICAL
    fi
fi
if [ $perfdata -eq 1 ]; then
    result="$result - There are $dirsize files in dir $dirpath|'size'=${dirsize};${thresh_warn};${thresh_crit}"
    echo $result
    exit $exitstatus
fi

echo "$result - There are $dirsize files in dir $dirpath"
exit $exitstatus
Categories: BashScripts Tags: , , , , ,
  1. Markus Mann
    February 19th, 2014 at 16:50 | #1

    In the case statement processing the cmd-line switches you can use

    -h|–help) …

    so you don’t need to have the same code two times.

    -perfdata should be -p|–perfdata i suppose

    Line 172 doesn’t make any sense?

  2. prakash
    April 3rd, 2016 at 09:03 | #2

    got errors:

    ./check_files_sh: line 68:     print_usage: command not found
    ./check_files_sh: line 69:     exit: command not found
    ./check_files_sh: line 80: syntax error near unexpected token `)’
    ./check_files_sh: line 80: `        –help)’

    • admin
      April 25th, 2016 at 17:08 | #3

      Prakash,
      I just tried here and it worked.
      What OS are you running?
      It is tested on Linux Centos/RedHat/Debian/Ubuntu only.
      thx

  1. No trackbacks yet.

VAMOVE *

*