我需要编写一个将清理文件夹的函数。我已经写了一些代码
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通用。
答案 0 :(得分:1)
答案 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}}。