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

要想统计一个目录中的普通文件、目录文件以及其他文件的个数,就要事先知道这个文件夹中有哪些文件。然后,通过就可以判断这些文件哪些是普通文件、目录文件还是其他什么文件类型了。其实要想知道这个文件夹中有哪些文件,通过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"

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

如何统计目录下各种文件的数目,布布扣,bubuko.com

时间: 2024-10-11 22:52:22

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

wc命令统计目录下所有文件行数

想统计一下最近一个项目的代码行数,一个一个文件统计显然不是程序员的思维,wc命令可以统计一个文本的行数,结合find命令可以实现我的需求(注意符号):

linux 系统统计目录下文件夹的大小

du -ah --max-depth=1     这个是我想要的结果  a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度. du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du -sh 一.du的功能:`du` reports the amount of disk space used by the specified files and for each subdirectory (of directory argum

linux网络编程之面试题----------统计目录下所有目录和文件个数

题目如下: 实现linux下tree的单一功能[只打印目录个数和文件个数(不包含隐藏文件)] 首选我们介绍几个相关的linux 系统API 函数名 函数描述 函数声明 opendir 打开一个目录,成功返回一个DIR*类型指针,失败返回NULL DIR* opendir(const char* name) readdir 读取打开的目录下的子成员,成功返回结构体指针,否则返回NULL struct dirent* readdir(DIR* dir) closedir 关闭已打开的目录.成功返回0

linux ls列出目录下所有文件数量

查看统计当前目录下文件的个数,包括子目录里的. ls -lR| grep "^-" | wc -l[喝小酒的网摘]http://blog.hehehehehe.cn/a/12311.htm Linux下查看某个目录下的文件.或文件夹个数用到3个命令:ls列目录.用grep过虑.再用wc统计.举例说明:1.查看统计当前目录下文件的个数 ls -l | grep "^-" | wc -l 2.查看统计当前目录下文件的个数,包括子目录里的. ls -lR| grep &q

Python打开目录下所有文件

用Python打开指定目录下所有文件,统计文件里特定的字段信息. 这里是先进入2017-02-25到2017-03-03目录,然后进入特定IP段目录下,最后打开文件进行统计 import os, glob, re, sys from isCN import * urllocate = 6 if(len(sys.argv) < 3): print 'Useage comand JDName JDIPduan'; os.exit() print sys.argv[1]; ipDuan = sys.a

Python 读取某个目录下的文件

读取某个目录下的文件,如'/Users/test/test_kmls'目录下有test1.txt.test2.txt. 第一种方法读出的all_files是test1.txt.test2.txt 1 import os 2 3 kml_path=os.path.abspath('/Users/test/test_kmls') 4 all_files=os.listdir(kml_path) 5 for file in all_files: 6 print file 第二种方法可以获得文件的全路径

php读取目录下的文件

工作需要写了一个读取指定目录下的文件,并显示列表,点击之后读取文件中的内容 高手拍砖,目录可以自由指定,我这里直接写的是获取当前文件目录下面的所有文件 </pre> <?php /** * 读取指定目录下面的文件内容 * @author Administrator * */ class Catlog { /** * 要读取的目录 * @var string */ private $dir; /** * 文件名中必须存在 * @var string */ private $str = 'p

前两天有人问怎么取得一个目录下的文件,下面就是例子

<%@ Language=VBScript %> <% '================================================================ '函数名称:FileList '函数功能:列出目录下所有文件 '主要参数说明: '1--FolderUrl 虚拟路径 不可为空 '2----FileExName 文件扩展名 '函数返回值:收文记录 '====================================================

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m