gpt4 book ai didi

c - 在 Ubuntu 的终端中查找文件及其在目录中的路径,argv [2] 中给出的文件名

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:30 24 4
gpt4 key购买 nike

在这里,我列出了终端中给定目录中的所有文件及其类型。我想在终端中给出一个文件名,如果该文件存在于该文件夹中,我想打印它的名称和路径。我该怎么做?

void listDir(char *dirName){
DIR *dir;
struct dirent *dirEntry;
struct stat inode;
char name[1000];

dir=opendir(dirName);
if(dir==0){
printf("Error in opening the directory\n");
exit(-1);
}

while((dirEntry=readdir(dir))!=0){
sprintf(name, "%s/%s", dirName, dirEntry->d_name);

lstat(name, &inode);

if(S_ISDIR(inode.st_mode)){
printf("This is a directory: ");
}
else if(S_ISREG(inode.st_mode)){
printf("This is a file: ");
}
else if(S_ISLNK(inode.st_mode)){
printf("This is a link: ");
}

printf("%s\n", dirEntry->d_name);

}
}


int main(int argc, char **argv){

struct stat fileMetadata;

if(stat(argv[1], &fileMetadata) < 0){
printf("Error in getting information about the file");
exit(-1);
}

if(S_ISDIR(fileMetadata.st_mode)){ //it's a directory
printf("The content of %s (directory) is:\n", argv[1]);
listDir(argv[1]);
}
else{
printf("%s it's not a directory\n", argv[1]);
exit(-1);
}

}

最佳答案

这将在所有可能的目录和子目录中搜索文件名。文件名在命令行给出。将您的 listDir() 函数替换为此(这将搜索所有目录和子目录中的文件名并打印其绝对路径):

void listDir(char * dirName, char *fileName)
{
DIR *dir;
struct dirent *dirEntry;
struct stat inode;
char name[1000];
char buf[PATH_MAX + 1];

dir=opendir(dirName);
if(dir==0)
{
printf("Error in opening the directory\n");
}
printf("file_name : %s\n",fileName);
while((dirEntry=readdir(dir))!=0)
{
if(strcmp(dirEntry->d_name, fileName) == 0)
{
realpath(dirEntry->d_name, buf);
printf ("[%s]\n", buf);
}

}
}

realpath() 函数包括这个头文件:

#include <sys/stat.h>
#include <limits.h>

关于c - 在 Ubuntu 的终端中查找文件及其在目录中的路径,argv [2] 中给出的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44844619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com