首页 > 代码库 > 如何统计目录下各种文件的数目

如何统计目录下各种文件的数目

要想统计一个目录中的普通文件、目录文件以及其他文件的个数,就要事先知道这个文件夹中有哪些文件。然后,通过就可以判断这些文件哪些是普通文件、目录文件还是其他什么文件类型了。其实要想知道这个文件夹中有哪些文件,通过ls命令就可以知道了。

然后,在shell脚本中通过for循环得以实现。关键就在于,如果得到该文件夹中全部文件的文件名,这个时候就可以使用$(……)来实现。具体代码:

#! /bin/bashlet "dir_number=0"let "file_number=0"let "other_file=0"for file in $(ls $1)do     if [ -d $file]     then          let "dir_number+=1"     elif [ -f $file ]     then          let "file_number+=1"     else     then         let "other_file+=1"     fidoneecho "directoy number is $dir_number"echo "file numberis $file_number"echo "other file number is $other_number"

以上是通过for循环来实现统计各类文件的代码实现,那么,如果想要使用while循环来实现,代码应该怎么编写呢?其实,关键部分与for循环是一样的,不一样的是如何判断程序的退出。程序代码为:

#! /bin/bashlet "dir_number=0"let "file_number=0"let "other_file=0"set $(ls $1)while [ "$1" != "" ]do     if [ -d $1]     then          let "dir_number+=1"     elif [ -f $1 ]     then          let "file_number+=1"     else     then         let "other_file+=1"     fi     shiftdoneecho "directoy number is $dir_number"echo "file numberis $file_number"echo "other file number is $other_number"

其中的关键是使用set命令与$(……)共同使用,结果就可以把ls命令结果也就是各个文件。看成是不同的域,然后通过$1与shift命令共同使用,就可以判断目录中的全部文件,从而可以统计全部文件中各种类型的格式。

例外,在while循环中,除了使用以上方式外,还可以使用冒号命令,冒号命令可以简化逻辑,相当于TRUE的一个别名。另外,由于冒号命令是内置命令,其运行速度要比true快。具体实现代码为:

#! /bin/bashlet "dir_number=0"let "file_number=0"let "other_file=0"set $(ls $1)whiledo     if [ "$1" == "" ]     then         break     fi        if [ -d $1]     then          let "dir_number+=1"     elif [ -f $1 ]     then          let "file_number+=1"     else     then         let "other_file+=1"     fi     shiftdoneecho "directoy number is $dir_number"echo "file numberis $file_number"echo "other file number is $other_number"

以上就是统计目录中各类文件个数的具体实现代码。