如何统计Linux环境变量中各个目录下的文件数

来源:互联网 发布:sql exist in 编辑:程序博客网 时间:2024/05/17 02:00

首先说下思路:先获取到环境变量中的目录,用for循环遍历它们就可以打印出目录名,然后再用一层for循环,浏览各个目录下的文件,定义一个变量,每浏览一次该变量就+1,直至浏览完毕,这样每一次循环就能打印出每个目录下的文件数,最后将目录名和各自的文件数相继打印出来就行了。

我们先用echo命令看看$PATH环境变量中的目录:

[root@localhost ~]# echo $PATH/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin[root@localhost ~]#

我们看到,各个路径之间都由分号分隔,为了能让for循环识别,我们要把他们转换成空格才行:

sed 's/:/ /g'

新建一个变量,来保存经过转换的$PATH内容:

mypath=`echo $PATH | sed 's/:/ /g'`

转换好之后,我们开始第一层循环。第一层for循环的作用就是打印每个路径的名字:

for dir in $mypathdo    echo "$dir - 文件数"done

然后在其中嵌入第二层循环,在每一次遍历一个目录时,对其下的所有文件也进行遍历。在第一次循环开始之前可以新建一个变量并赋值0,在第二次循环的时候每次遍历都给这个变量+1,这样,每一个目录下的文件都会有一个各自的计数,这就是该目录下的文件数:

count=0for dir in $mypathdo    fileNum=`ls $dir`    for a in $fileNum    do        count=$[ $count+1 ]    done    echo "$dir - $count"    count=0done

第二次循环后记得给count重新赋值0,否则这个数会一直往上涨。

写完之后ls -l一下看看这个脚本是不是可执行,如果不是要加权限哦:

chmod u+x fileNum.sh

这样,整个脚本就完成了:

#! /bin/bashmypath=`echo $PATH | sed 's/:/ /g'`count=0for dir in $mypathdo    fileNum=`ls $dir`    for a in $fileNum    do        count=$[ $count+1 ]    done    echo "$dir - $count"    count=0done

最后我们来看看跑下来的效果~

[root@localhost Tino]# ./fileNum.sh /usr/lib64/qt-3.3/bin - 12/usr/local/sbin - 0/usr/local/bin - 0/sbin - 272/bin - 118/usr/sbin - 275/usr/bin - 1465ls: cannot access /root/bin: No such file or directory/root/bin - 0[root@localhost Tino]#
0 0