• 大小: 8KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签:

资源简介

仿照unix操作系统中的find命令,实现自己的一个find命令。find命令从指定的目录下开始,递归地查找指定文件。其命令格式如下: find PATH -option 参数 [-print] [-exec 命令 {} \;] PATH:查找的起始目录。 -option 参数:用来控制搜索方式,具体如下(以下只列出最常用的):     -name "文件":指定要查找的文件名,可以有通配符?*等。     -prune 目录:指出搜索时不搜索该目录。     -mtime +n或-n:按时间搜索,+n:表示n天之前修改过的文件;-n:表示今天到n天前之间修改过的文件。     -ctime +n或-n:也是按时间查找,+n:表示n天之前创建的文件;-n:表示今天到n天前之间创建的文件。     -print:将搜索结果输出到标准输出。 可选的实验1:实现-exe选项。     -exec:对查找到的每一个结果实行指定的程序。格式如下:     -exec 程序名 提示:执行指定的程序可以创建一个进程执行

资源截图

代码片段和文件信息

#include/* {{{ */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* }}} */
//全局变量/* {{{ */
#define TRUE 1
#define FALSE 0
#define MAX_RESULT 500//最多能存储多少个查询结果

int nameToggle=FALSE;//是否开启-name选项
int pruneToggle=FALSE;//是否开启-prune选项
int mtimeToggle=FALSE;//是否开启-mtime选项
int ctimeToggle=FALSE;//是否开启-ctime选项
int printToggle=FALSE;//是否开启-print选项
int execToggle=FALSE;//是否开启-exec选项

int namePosition=0;//-name是第几个参数
int prunePosition=0;//-prune是第几个参数
int mtimePosition=0;//-mtime是第几个参数
int ctimePosition=0;//-ctime是第几个参数
int execPosition=0;//-exec是第几个参数

char* result[MAX_RESULT];//存储查询结果
int resultPosition=0;//result数组下标
/* }}} */
int matchName(char* stringchar* pattern){/* {{{ */
regex_t reg;//正则表达式
if(regcomp(®patternREG_NOSUB|REG_ICASE)!=0){
perror(“compile regex error“);
printf(“regex:%s\n“pattern);
exit(EXIT_FAILURE);
}
int status=regexec(®string(size_t)0NULL0);
regfree(®);
if(status==0)
return TRUE;
return FALSE;
}/* }}} */
int matchMtime(struct stat stat_bufint n){/* {{{ */
time_t now=time(NULL);
time_t mtime=stat_buf.st_mtime;
/*printf(“********************\n“);
printf(“test mtime:\t%s\n“ctime(&mtime));
printf(“time now:\t%s\n“ctime(&now));
printf(“difftime:\t%f\n“difftime(nowmtime));
printf(“day:\t%d\n“(int)difftime(nowmtime)/(60*60*24));
printf(“********************\n“);*/
int day=(int)difftime(nowmtime)/(60*60*24);//上次修改距今天的天数
if(n<0){//搜索今天到n天前之间修改过的文件
if(day+n<0) return TRUE;
}
else{//搜索n天之前修改过的文件
if(day>=n) return TRUE;
}
return FALSE;
}/* }}} */
int matchCtime(struct stat stat_bufint n){/* {{{ */
time_t now=time(NULL);
time_t ctime_=stat_buf.st_ctime;
int day=(int)difftime(nowctime_)/(60*60*24);//自文件创建到今天的天数
/*printf(“********************\n“);
printf(“test ctime:\t%s\n“ctime(&ctime_));
printf(“time now:\t%s\n“ctime(&now));
printf(“difftime:\t%f\n“difftime(nowctime_));
printf(“day:\t%d\n“(int)difftime(nowctime_)/(60*60*24));
printf(“********************\n“);*/
if(n<0){//今天到n天前之间创建的文件
if(day+n<0) return TRUE;
}
else{//n天前创建的文件
if(day>=n) return TRUE;
}
return FALSE;
}/* }}} */
char* getPath(char* pathchar* filename){/* {{{ *///根据目录名和目录下的文件名获取文件路径
int len1=strlen(path);
int len2=strlen(filename);
char* str=(char*)malloc(len1+len2+2);
str[0]=‘\0‘;
str=strcat(strpath);
if(path[len1-1]!=‘/‘) str=strcat(str“/“);
str=strcat(strfilename);
return str;
}/* }}} */
void printHelp(){//输出帮助信息/* {{{ */
printf(“用法:find 路径 -选项 正则表达式\n“);
printf(“选项说明:\n“);
printf(“-name \“文件\“\n\t指定要查找的文件名\n“);
printf(“-prune 目录\n\t指出搜索时不搜索该目录\n“);
printf(“-mtime +n或-n\n\t按时间查找\n“);
printf(“\t+n表示n天之前修改过的文件\n“);
printf(“\t-n表示n今天到n天之前修改过的文件\n“);
printf(“-ctime +n或-n\n\t按时间查找\n“);
printf(“\t+n表示n天之前创建的文件\n“);
printf(“\t-n表示今天到n天前之间创建的文件\n“);
printf(“-print\n\t将搜索结果输出到标准输出\n“);
printf(“-exec 程序名\n\t对查

评论

共有 条评论

相关资源