Поиск файлов по шаблону

Модератор: Модераторы разделов

Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Поиск файлов по шаблону

Сообщение TechnoMag »

Нужно отсечь все директории и оставить только файлы.
Я так понимаю что в код нужно включить проверку на атрибут что-то вроде этого:

Код: Выделить всё

        struct stat *newstat1;
    stat("/bin/usr/xpdf", newstat1);
    if (S_ISDIR(S_IFDIR)==1)
    printf("is dir");


Чтение glibc и ман не дало результатов - слишком все кратко.

Код: Выделить всё

#include <ncurses.h>
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int findfiles(FILE *out2, char* path)
{
        DIR *mp3dir;
        struct dirent *dir_str;
        mp3dir=opendir(path);
        if (mp3dir!= NULL)
        {
                while (dir_str=readdir(mp3dir))
                {
                        fprintf(out2, "dir: %s \n", dir_str->d_name);
                }
        }
        closedir(mp3dir);
        return 0;
}

int main(/* int argc,char *argv[] */)
{
        char file1[123];
        FILE *out1;

  // getcwd(buf, 254);

  out1=fopen("/tmp/newfile", "w");

  initscr();


  start_color();

  init_pair(1, COLOR_GREEN, COLOR_BLACK);
  init_pair(2, COLOR_WHITE, COLOR_BLUE);

  move(1, 0);
  attron(COLOR_PAIR(1));
  printw("Please, enter path to folder, where keep your MUSIC:");
  move(2,0);

  scanw("%s", file1);
  move(3,0);
  printw("Folder: %s, press any key", file1);

  fprintf(out1, "Folder: %s, press any key\n", file1);
  //fprintf(out1, "your working directory: %s", buf);

  findfiles(out1, file1);

  refresh();
  getch();

  endwin();
  fclose(out1);
        return 0;
}
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
JackYF
Сообщения: 129
ОС: Debian GNU/Linux

Re: Поиск файлов по шаблону

Сообщение JackYF »

По-моему, ты сам дал ответ:

Код: Выделить всё

struct stat *newstat1;
    fstat("/bin/usr/xpdf", newstat1);
    if (newstat1.mode & S_IFDIR)
    printf("is dir");
"В природе не существует инструмента, машины или устройства, по силе и виртуозности сравнимого с человеческой рукой."
В. Г. Бэнхэм.
---
Ваяю "нелинейный" клавиатурный тренажёр для GNU/Linux - nlkt.
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: Поиск файлов по шаблону

Сообщение TechnoMag »

JackYF писал(а):
11.02.2008 21:39
По-моему, ты сам дал ответ:

Код: Выделить всё

struct stat *newstat1;
    fstat("/bin/usr/xpdf", newstat1);
    if (newstat1.mode & S_IFDIR)
    printf("is dir");


Это не правильно, не работает.
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: Поиск файлов по шаблону

Сообщение d_n_k »

файл = не каталого и не блочное устройство и не символьное устройство и не ссылка и не сокет и не еще-чего-нибудь
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Поиск файлов по шаблону

Сообщение diesel »

такой совет есть. посмотри в исходниках bash на test.c эта програмка как раз умеет тестить на то является ли файл директорией, обычным файлом итп ... помимо всего прочего - там все вполне понятно.
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Поиск файлов по шаблону

Сообщение Red User »

Посмотрел man 2 stat. Наверное, как-то так надо:

Код: Выделить всё

char filename[] = "/dir/filename";
struct stat stat_buf;

stat(filename, &stat_buf);
if (S_ISREG(stat_buf.st_mode)) {
    // Это обычный файл
}
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Поиск файлов по шаблону

Сообщение drBatty »

я делал так:

Код: Выделить всё


#define ATTR_SOCKET    0xC
#define ATTR_LINK    0xA
#define ATTR_FILE    0x8
#define ATTR_BLK    0x6
#define ATTR_DIR    0x4
#define ATTR_CHR    0x2
#define ATTR_FIFO    0x1

while(entry = readdir(d))
    {
        if(entry->d_type == ATTR_DIR)
//это каталог
else
//иначе это файл, может какой-то особый, вроде сокета
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: