要想统计一个目录中的普通文件、目录文件以及其他文件的个数,就要事先知道这个文件夹中有哪些文件。然后,通过就可以判断这些文件哪些是普通文件、目录文件还是其他什么文件类型了。其实要想知道这个文件夹中有哪些文件,通过ls命令就可以知道了。
然后,在shell脚本中通过for循环得以实现。关键就在于,如果得到该文件夹中全部文件的文件名,这个时候就可以使用$(……)来实现。具体代码:
#! /bin/bash let "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" fi done echo "directoy number is $dir_number" echo "file numberis $file_number" echo "other file number is $other_number"
以上是通过for循环来实现统计各类文件的代码实现,那么,如果想要使用while循环来实现,代码应该怎么编写呢?其实,关键部分与for循环是一样的,不一样的是如何判断程序的退出。程序代码为:
#! /bin/bash let "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 shift done echo "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/bash let "dir_number=0" let "file_number=0" let "other_file=0" set $(ls $1) while : do 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 shift done echo "directoy number is $dir_number" echo "file numberis $file_number" echo "other file number is $other_number"
以上就是统计目录中各类文件个数的具体实现代码。
时间: 2024-10-11 22:52:22