AIX7.1删除大批量文件(百万级、千万级)

假设/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 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <sys/types.h>
 4 #include <dirent.h>
 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<max) && ((ent=readdir(dir))!=NULL) ){
20                 if(strcmp(ent->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                 else
27                         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 {} \; &

 

转载于:https://www.cnblogs.com/cloudwind2011/p/9430027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值