假设/data/test目录下含有数百万上千万的文件需要删除,可以选择的方式如下:
1.如果文件名不包含空白符、引号等特殊字符,则可以使用如下命令:
find /data/test -type f |xargs rm -f
2.如果文件名包含空白符、引号等特殊字符,则在linux中使用如下命令:
find /data/test -type f -print0 |xargs -0 rm -f
而我所用的AIX7.1平台的xargs不支持-0选项,于是决定采用方式3:c语言写段代码删除。
3.c语言删除代码
该代码删除800万量级的文件时可以,删除2000万量级的文件时出现错误:Value too large to be stored in data type,于是又回到使用find ... rm的方法,具体命令参加方法四。
以下代码只假设要删除的目录中全是要删除的文件;如果有子目录,应该做递归删除;如果有条件的删除,可以使用stat函数获取每个文件的信息,然后判断文件信息是否满足删除条件再进行操作。
1 #include2 #include 3 #include 4 #include 5 6 #define MAX_FILE_NAME_LEN 256 7 8 void clean(const char *dirName,int max){ 9 DIR *dir;10 struct dirent *ent;11 int n=0;12 char fullFileName[MAX_FILE_NAME_LEN];13 14 dir=opendir(dirName);15 if(dir==NULL){16 printf("open dir error:%s\n",dirName);17 return;18 }19 while((n d_name,".")==0 || strcmp(ent->d_name,"..")==0 )21 continue;22 sprintf(fullFileName,"%s/%s",dirName,ent->d_name);23 24 if(remove(fullFileName)==0)25 printf("delete file ok: %s\n",ent->d_name);26 else27 printf("delete file fail: %s\n",ent->d_name);28 n++;29 }30 printf("%d files deleted.\n",n);31 closedir(dir);32 }33 void main(int argc,char *argv[]){34 char dirName[MAX_FILE_NAME_LEN]="/data/test";35 int max=10;36 if(argc>1)37 strcpy(dirName,argv[1]);38 if(argc>2)39 max=atoi(argv[2]);40 clean(dirName,max);41 }
4.使用find + rm命令删除2000万级的文件
find /data/test -type f -exec rm {} \; &