android中find 递归查找子目录,递归目录查找文件

#include static struct option opts[] = {

{.name = "help", .has_arg = 0, .val = 'h'},

{.name = "name", .has_arg = 1, .val = 'n'},

{.name = "path", .has_arg = 1, .val = 'p'},

{NULL}

};

static void print_help(void) {

printf("-h Print this help\n");

printf("-n Filename\n");

printf("-p Search path\n");

exit(-1);

}

static void find_file(char const *name, char const *dir) {

DIR *dp;

struct dirent *entry;

struct stat statbuf;

char buf[512];

char path[1024];

if((dp = opendir(dir)) == NULL) {

fprintf(stderr,"cannot open directory: %s\n", dir);

exit(-1);

}

chdir(dir);

while((entry = readdir(dp)) != NULL) {

lstat(entry->d_name, &statbuf);

if(S_ISDIR(statbuf.st_mode)) {

if(strcmp(".", entry->d_name) == 0 ||

strcmp("..", entry->d_name) == 0)

continue;

find_file(name, entry->d_name);

} else

if (strcmp(name, entry->d_name) == 0) {

bzero(buf, 0);

bzero(path, 0);

if (getcwd(buf, 512) == NULL) {

fprintf(stderr, "getcwd failed\n");

exit(-2);

}

snprintf(path, 1024, "%s/%s\n", buf, entry->d_name);

printf("%s", path);

}

}

chdir("..");

closedir(dp);

}

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

char *name = NULL, *path = NULL;

char c;

while((c = getopt_long(argc, argv, "hn:p:d:", opts, NULL)) != -1) {

switch(c) {

case 'n':

name = optarg;

break;

case 'p':

path = optarg;

break;

case 'h':

default:

print_help();

}

}

find_file(name, path);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值