列出指定目录和其子目录下文件数量的shell脚本
这个脚本可以用来检查服务器上哪个目录发生了文件过量的情况,提前发现可能发生的超多文件目录的情况。主要使用的是find命令,先find所有的子目录,然后再用find找出所有文件,然后用wc来获取文件数量。脚本能够设定成邮件模式,加入crontab可以在指定时间执行,然后将运行结果邮件给指定的用户。还可以设定find的深度,避免目录层数过多而浪费时间。详细内容见代码。
#!/bin/bash # By Chen.Zhidong # http://sillydong.com # Email:njutczd+gmail.com PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH #Begin usage(){ echo -e "Check inode of path\nUsage: $0 [mail|local] [max_length] [path_to_check]" exit 0 } check(){ if [ -e $2 -a -d $2 ];then dirs=`find -P $2 -maxdepth $1 -type d | grep -xv $2 | grep -xv . | sort` for d in $dirs do if [ -e $d -a -d $d ];then c=$(find -P $d -type f | wc -l) printf "%-70s- %s\n" $d $c fi done printf "%-70s- $(find -P $2 -type f | wc -l)\n" "Total:" else echo "Fail to get file dir" fi } if [ $# -lt 2 ];then usage else if [ $3 ];then dir=$3 else dir=$(pwd) fi case $1 in "mail") TMPLOG=`mktemp` echo "`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}' | head -n 1`" > $TMPLOG check $2 $dir >> $TMPLOG 2>&1 mail -s "CHECKINODE INODE RESULT IN `date`" njutczd@gmail.com < $TMPLOG ;; "local") check $2 $dir ;; *) usage ;; esac fi exit $? #End
相关文章
上一篇: Nginx启动脚本下一篇: Nginx启动脚本(二)
怀疑你现在做了系统管理员了~
@alswl:我一直都是运维+开发 嘿嘿