linux中如何统计目录中的文件,[Linux目录文件]在Linux中统计目录内文件
//调用opendir和readdir函数对指定目录进行遍历操作
//然后打印输出指定目录中各种类型的文件数目
#include
#include
#include
#include
#include
#include
#include
typedefint Myfunc(const char *, const struct stat *, int); //定义一个函数
static Myfunc myfunc;
static int myftw(char *, Myfunc *);
static int dopath(Myfunc *);
static long nreg, ndir, nblk, nchr, nfifo, nslink, nsock, ntot;
//各种类型的文件数目对应的变量
char *path_alloc(int* size);
int main(int argc, char *argv[])
{
int ret;
if (argc != 2)
{
printf("请输入正确的参数!\n"); //参数错误
return 1;
}
ret = myftw(argv[1], myfunc);/* does it all */
ntot = nreg + ndir + nblk + nchr + nfifo + nslink + nsock;
//计算文件总量
if (ntot == 0) //如果目录中没有文件则将ntot设置为1以避免除数为0
{
ntot = 1;
}
//以下一次打印各种类型文件的数据
printf("普通文件 = %7ld, %5.2f %%\n", nreg, nreg*100.0/ntot);
printf("目录文件 = %7ld, %5.2f %%\n", ndir,ndir*100.0/ntot);
printf("块设备文件 = %7ld, %5.2f %%\n", nblk,nblk*100.0/ntot);
printf("字设备文件 = %7ld, %5.2f %%\n", nchr, nchr*100.0/ntot);
printf("FIFOs = %7ld, %5.2f %%\n", nfifo,nfifo*100.0/ntot);
printf("符号链接文件 = %7ld, %5.2f %%\n", nslink, nslink*100.0/ntot);
printf("套接字文件 = %7ld, %5.2f %%\n", nsock,nsock*100.0/ntot);
return ret;
}
//路径缓冲区分配函数
char *path_alloc(int* size)
{
char *p = NULL;
if(!size)
{
return NULL;
}
p = malloc(256);
if(p)
{
*size = 256;
}
else
{
*size = 0;
}
return p;
}
#defineFTW_F1//
#defineFTW_D2//目录
#defineFTW_DNR3//不能读的目录
#defineFTW_NS4//不能获得状态的文件
static char*fullpath;//存放每个文件完整路径
static int myftw(char *pathname, Myfunc *func)
{
int len;
fullpath = path_alloc(&len);//给路径缓冲区分配一个长度
strncpy(fullpath, pathname, len);//复制文件名称
fullpath[len-1] = 0;
return(dopath(func));
}
//获得文件的状态
static int dopath(Myfunc* func)
{
struct statstatbuf;
struct dirent*dirp;
DIR *dp;
int ret;
char *ptr;
if (lstat(fullpath, &statbuf)
{
return(func(fullpath, &statbuf, FTW_NS));
}
if (S_ISDIR(statbuf.st_mode) == 0)//如果不是目录
{
return(func(fullpath, &statbuf, FTW_F));
}
if ((ret = func(fullpath, &statbuf, FTW_D)) != 0)
{
return(ret);
}
ptr = fullpath + strlen(fullpath);//指向路径缓冲区结尾
*ptr++ = '/';
*ptr = 0;
if ((dp = opendir(fullpath)) == NULL)//如果不能读目录
{
return(func(fullpath, &statbuf, FTW_DNR));
}
while ((dirp = readdir(dp)) != NULL) {
if (strcmp(dirp->d_name, ".") == 0 ||
strcmp(dirp->d_name, "..") == 0)
continue;/* ignore dot and dot-dot */
strcpy(ptr, dirp->d_name);/* append name after slash */
if ((ret = dopath(func)) != 0)/* recursive */
break;/* time to leave */
}
ptr[-1] = 0;/* erase everything from slash onwards */
if (closedir(dp)
{
printf("can't close directory %s\n", fullpath);
}
return(ret);
}
static int myfunc(const char *pathname, const struct stat *statptr, int type)
{
switch (type) {
case FTW_F:
switch (statptr->st_mode & S_IFMT) {
case S_IFREG:nreg++;break;
case S_IFBLK:nblk++;break;
case S_IFCHR:nchr++;break;
case S_IFIFO:nfifo++;break;
case S_IFLNK:nslink++;break;
case S_IFSOCK:nsock++;break;
case S_IFDIR:
printf("for S_IFDIR for %s\n", pathname);
}
break;
case FTW_D:
ndir++;
break;
case FTW_DNR:
printf("can't read directory %s\n", pathname);
break;
case FTW_NS:
printf("stat error for %s\n", pathname);
break;
default:
printf("unknown type %d for pathname %s\n", type, pathname);
}
return(0);
}
linux中如何统计目录中的文件,[Linux目录文件]在Linux中统计目录内文件相关推荐
- linux中的tar打包、压缩多个文件、磁盘查看和分区类、du查看文件和目录占用的磁盘空间
文章目录 1.8.3 tar 打包 1.8.3.1压缩多个文件 1.8.3.2压缩目录 1.8.3.3解压到当前目录 1.8.3.4解压到指定目录 1.9 磁盘查看和分区类 1.9.1 du查看文件和 ...
- linux进入文件夹命令,如何在 Linux 中不使用 CD 命令进入目录/文件夹?
众所周知,如果没有 cd 命令,我们无法 Linux 中切换目录.这个没错,但我们有一个名为 shopt 的 Linux 内置命令能帮助我们解决这个问题. shopt 是一个 shell 内置命令,用 ...
- linux终端删除文件命令_如何在Linux终端中删除文件和目录
linux终端删除文件命令 Fatmawati Achmad Zaenuri/Shutterstock.comFatmawati Achmad Zaenuri / Shutterstock.com T ...
- linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...
前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(oth ...
- 将linux目录中的特定文件推送到手机_linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹...
linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录的复制是经常要用到的.linux下进行复制的命令为cp. 假设复制源目录 为 dir1 ,目标目录为 ...
- linux中tmp目录是什么,Linux文件系统目录标准介绍(FHS)-tmp是什么文件
概述 在Linux中一切皆文件,而文件是由文件系统组织存放,但文件系统的组织存放方式也是有标准的.一般只要是一个标准化的Linux发行版系统都会遵循这种标准,不然就太混乱了.而这种Linux文件系统标 ...
- 7 centos 查看程序文件数量_解析CentOS 7中系统文件与目录管理
LINUX Linux操作系统 解析CentOS 7中系统文件与目录管理 Linux目录结构 Linux目录结构是树形的目录结构 根目录 所有分区.目录.文件等的位置起点 整个树形目录结构中,使用独立 ...
- linux 文件夹换所属用户,Linux中账号管理之权限管理(下)
linux中的账号管理我们在前面两张已经介绍了一些用户和组的相关概念,常用的配置文件,命令的使用.现在我们来看看账号管理中最傲娇的部分就是我们的权限管理. 一.简单介绍权限的概念 以install.l ...
- Linux中把文件夹打成war包,SpringBoot中maven项目打成war包部署在liunx服务器上的方法...
说明:Spring Boot由于内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再像Spring项目还需要外置的Tomcat等容器来进行部署工作了,通过启动 ...
- linux中怎么安装ded包_快速提示:如何在Linux中安装.deb和.tar文件 - push博客
在本快速教程中,我将解释如何使用终端命令在Linux中安装程序.本教程使用LinuxMint 18(肉桂64位),但是下面提供的命令对于其他版本的Linux是通用的,比如Ubuntu.对于那些刚接触l ...
最新文章
- python 列表list 合并的方法
- np.trapz 生动的解释
- GridView 自写分页 存储过程
- 20162302 《程序设计与数据结构》第一周学习总结
- 使用gethostname()函数和gethostbyname()函数获取主机相关信息
- Treasure Island CodeForces - 1214D(dfs)
- 健康丨汗从哪里出 病从哪里来
- css怎样定义div大小,css如何设置div大小
- 如何weak link一个framework (高版本兼容低版本)
- 剑指offer——面试题9:求斐波那切数列的四种方法
- AcWing 902. 最短编辑距离(线性DP)
- Docker 安装基本操作
- 验证性因子分析(三)
- 越南无线网dns服务器设置,越南dns 服务器地址
- 用PYTHON画谢尔宾斯基三角形(代码可复制)
- 微信小程序路线规划导航,选择起点和终点路线规划
- 最新邮箱密码破解方法
- 一炉真香起静中开鸿蒙翻译,【真 香】_古籍全文检索_诗词名句网
- FineBI 无法将聚合和非聚合参数混用(或条件求和)
- IOS应用版本号设置
热门文章
- ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源
- Tomcat 服务器只能存有一个正在运行的项目
- [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表
- centos 修改ip地址
- 有人问我,为什么1+1等于2
- 深入理解Linux内存映射机制
- 信息系统项目管理基础(1)
- mac安装python3.7两个版本_MAC下同时安装Python2和Python3
- c++实现超声回波包络检测_超声波物位计的选用
- mysql_ping()函数的作用以及返回值的类型正确的是,[单选] mysql_ping()函数的作用以及返回值的类型正确的是:()...