我正在尝试在 Linux 中检查一个文件夹是否有任何子文件夹而不遍历其子文件夹。到目前为止,我发现的最接近的是使用ftw
并在第一个子文件夹处停止 - 或使用scandir
并过滤结果。然而,对于我的目的来说,两者都是矫枉过正,我只是想要一个是/否。
在 Windows 上,这是通过调用SHGetFileInfo
然后dwAttributes & SFGAO_HASSUBFOLDER
对返回的结构进行测试来完成的。Linux上有这样的选项吗?
您提到的可能性(以及 e.James 的)在我看来似乎比 C++ 程序更适合 shell 脚本。假设“C++”标签是故意的,我认为你最好直接使用 POSIX API:
// warning: untested code.
bool has_subdir(char const *dir) {
std::string dot("."), dotdot("..");
bool found_subdir = false;
DIR *directory;
if (NULL == (directory = opendir(dir)))
return false;
struct dirent *entry;
while (!found_subdir && ((entry = readdir(directory)) != NULL)) {
if (entry->d_name != dot && entry->d_name != dotdot) {
struct stat status;
stat(entry->d_name, &status);
found_subdir = S_ISDIR(status.st_mode);
}
}
closedir(directory);
return found_subdir;
}
getdirentries是否确实希望您这样做?我认为如果没有目录,它应该什么都不返回。我自己会尝试过,但暂时无法访问 linux 机器:(