如何编写一个可以清理文件夹的函数?

时间:2019-06-18 07:14:30

标签: c linux

我需要编写一个将清理文件夹的函数。我已经写了一些代码

void cleandir(const char* path)
{
    struct dirent* file;
    struct stat filestat;
    DIR* fold = opendir(path);
    chdir(path);    //Open in this catalog
    while((file = readdir(fold)) != NULL)
    {
        if((strcmp(".", file->d_name) == 0) || (strcmp("..", file->d_name) == 0)) //Skip '.' and '..'
        continue;
    stat(file->d_name, &filestat);  //Put the info about file to the filestat struct
    if(S_ISDIR(filestat.st_mode) == 1)
    {
        //What to do if it's a folder
        //Recursion?
    }
    else if(S_ISREG(filestat.st_mode) == 1)
    {
        //What to do if it's a file
    }
  }
}

我正在使用Linux Mint Cinnamon 19.1。内核版本为4.15.0-50通用。

2 个答案:

答案 0 :(得分:1)

要处理目录,您可以再次递归调用cleandir并传递附加有目录分隔符的pathfile->d_name作为参数。递归返回时,请使用remove删除目录。

要删除文件,可以使用unlink

答案 1 :(得分:1)

请注意,目录中的条目不仅限于常规文件和目录:您可能具有Unix域套接字,符号链接和 special (设备)文件。

恕我直言,您应该只测试目录,因为目录只能在目录为空时才能删除,因此这里需要递归(后跟awk -F'[, ]' '{ if($5 ~ /.?[[:digit:]]{3}[a-z]$/) { printf("%s,f. %s\n",$1,$5)} else { printf("%s,%s %s %s\n",$1,$5,$6,$7) } }' test.txt 调用)以及所有其他您可以使用{ {1}}。