Вы можете использовать lstat и макрос S_ISDIR .
например. без проверки ошибок:
struct stat buffer;
int status;
char path[PATH_MAX];
DIR *dir = opendir(dir_name);
...
struct dirent *de = readdir(dir);
sprintf(path, "%s/%s", dir_name, de->d_name);
status = lstat(path, &buffer);
if(S_ISDIR(buffer.st_mode))
{
...
}
EDIT: исправлено включение каталога в путь lstat (для el.pescado). Как отметил R Samuel Klatchko, вы можете захотеть использовать подход белого списка (S_ISREG) вместо того, чтобы заносить в черный список типы по мере их появления.