资源简介

仿照unix操作系统中的find命令,在实现一个myfind命令。myfind命令从指定的目录下开始,递归地查找指定文件。其命令格式如下: myfind PATH -option 参数 [-print] [-exec 命令 {} \;]

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define TRUE 1
#define FALSE 0
#define MAX_SIZE   100

int nameSwitch =FALSE;//-name命令的开关
int pruneSwitch=FALSE;//-prune命令的开关
int mtimeSwitch=FALSE;//-mtime命令的开关
int ctimeSwitch=FALSE;//-ctime命令的开关
int printSwitch=FALSE;//-print命令的开关
int execSwitch =FALSE;//-exec命令的开关

char *nameParam;//-name命令的参数
char *pruneParam;//-prune命令的参数
char *mtimeParam;//-mtime命令的参数
char *ctimeParam;//-ctime命令的参数
char *execParam[MAX_SIZE];//-exec命令的参数
int execParamIndex;//-exec命令的参数的个数

char result[MAX_SIZE][MAX_SIZE];
int resultIndex=0;


//帮助提示
void printHelp()
{
        printf(“-help \n“);
        printf(“用法:myfind 路径 -选项 参数\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对查找到的结果执行指定的命令(注意要输入\\;作为结束)\n“);

}

//命令解析
void interpreter(int argcchar *argv[])
{
  int iflag=1;
  for(i=2;i  {
      if(strcmp(argv[i]“-name“)==0)
      {
          nameSwitch=TRUE;
          nameParam=argv[++i];
//          printf(“nameParam=%s\n“nameParam);
      }
      else if(strcmp(argv[i]“-prune“)==0)
      {
          pruneSwitch=TRUE;
          pruneParam=argv[++i];
//          printf(“pruneParam=%s\n“pruneParam);
      }
      else if(strcmp(argv[i]“-mtime“)==0)
      {
          mtimeSwitch=TRUE;
          mtimeParam=argv[++i];
//          printf(“mtimeParam=%s\n“mtimeParam);
      }
      else if(strcmp(argv[i]“-ctime“)==0)
      {
          ctimeSwitch=TRUE;
          ctimeParam=argv[++i];
//          printf(“ctimeParam=%s\n“ctimeParam);
      }
      else if(strcmp(argv[i]“-print“)==0)
      {
          printSwitch=TRUE;
      }
      else if(strcmp(argv[i]“-exec“)==0)
      {
          int j=0;
          execSwitch=TRUE;
          while(strcmp(argv[i]“;“)!=0)
          {
           execParam[j++]=argv[++i];
          }
          execParamIndex=j;
//          int k;
//          for(k=0;k//              printf(“execParam=%s\n“execParam[k]);
      }
      else flag=0;

  }
  if(!flag)
  {
    printHelp();
    exit(EXIT_FAILURE);
  }

}




//扫描文件
int browse_folder(char * pathName)
{
  DIR *pdir;
  struct dirent*pentry;//目录结构体
  char temp[256];
  char path[256];
  pdir =opendir(pathName);
  if(pdir==NULL)
  {
      perror(“opendir“);
      return 0;
  }

  while((pentry=readdir(pdir))!=NULL)
  {
      if(strcmp(pentry->d_name“.“)==0||strcmp(pentry->d_name“..“)==0)
          continue;
      strcpy(temppathName);
      sprintf(path“%s/%s“temppentry->d_name);
// 

评论

共有 条评论