• 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
    ",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
    ",ent->d_name);
    26                 else
    27                         printf("delete file fail: %s
    ",ent->d_name);
    28                 n++;
    29         }
    30         printf("%d files deleted.
    ",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 {} ; &
  • 相关阅读:
    A/B test模块使用以及配置
    Linux下的tar压缩解压缩命令详解
    php mysql转义特殊字符的函数(转)
    cas server + cas client 单点登录 原理介绍
    php二维码的生产以及下载
    shiro 获取已经登录的用户
    Sql 根据多条件查询重复的数据 MySQL删除重复数据
    js base64 转PDF并下载,js baser64转图片并下载
    当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
    我的博客初始“话”
  • 原文地址:https://www.cnblogs.com/cloudwind2011/p/9430027.html
Copyright © 2020-2023  润新知