6 / 5 / 4
Регистрация: 07.11.2014
Сообщений: 58
1

Чтение большого количества файлов

11.01.2018, 00:49. Показов 983. Ответов 3
Метки нет (Все метки)

Всем привет. Возможно ли прочитать сразу огромное количество файлов?
cat test/123/*/*.log - выдает сообщение о превышении количества аргументов. Может какие-то обходы. Конечный результат нужно передать на stdin скрипта, как текст всех этих файлов.

Добавлено через 13 минут
Решил.
Но занимает довольно много времени. Возможно есть менее затратный вариант?
Код
find test/123/*/ -name "*.log" | xargs -i cat {} | python script-pipeline.py
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2018, 00:49
Ответы с готовыми решениями:

Сортировка большого количества файлов по папкам, созданным по части названия файлов
Здравствуйте, уважаемые! Сразу к делу. Имеется папка, в ней уже более 500.000 файлов, и с каждым...

Скачивание большого количества файлов
Всем привет уже много способов перепробовал ну вот Есть в Memo1 ссылки Типа...

Загрузка большого количества файлов
Здравствуйте! Прошу помощи и подсказок, столкнулся со следующей проблемой, имеется большое...

Хранение большого количества файлов
Есть свой видео-хостинг типа ютуба, и вот такой вопрос возник. Как мне организовать хранение...

3
4423 / 3425 / 347
Регистрация: 12.03.2013
Сообщений: 5,909
11.01.2018, 04:16 2
Лучший ответ Сообщение было отмечено fR3W как решение

Решение

Попробуйте сохранить следующее
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <glob.h>
 
#define BUFSIZE 4096
 
int main (int argc, char **argv) {
    if (argc == 1) return 1;
    char buf[BUFSIZE];
    glob_t glb;
    char* pattern;
    FILE *fp;
    pattern = argv[1];
    glob(pattern, 0, NULL, &glb);
    for (int i = 0; i < glb.gl_pathc; ++i) {
        if (fp = fopen(glb.gl_pathv[i], "r")) {
            size_t n = 0;
            while (n = fread(buf, 1, BUFSIZE, fp)) fwrite(buf, 1, n, stdout);
            fclose(fp);
        }
    }
    globfree(&glb);
    fflush(stdout);
    return 0;
}
в файл multicat.c, потом сделайте
Bash
1
make multicat
и попробуйте
Bash
1
./multicat 'test/123/*/*.log'
Быстрее, чем си, вряд ли получится.

Дисклеймер: на си я пишу плохо.
1
Эксперт NIX
1868 / 640 / 228
Регистрация: 28.06.2015
Сообщений: 1,378
Записей в блоге: 16
11.01.2018, 11:12 3
helter, Я не поняла, размер считываемых файлов ограничен размером буфера в 4096 ?
Если размеры файлов могут значительно варьироваться тогда будет лучше сначала
определить размер файла через lseek и выделить динамически буфер через calloc или
зареннее выделенный размер буфера менять при необходимости через realloc,
чтобы обойти ограничение. Пишу, чтобы обозначить возможную проблемму, возможно
просто необходимо увеличить размер буфера с большим запасом и все. Буфер один
для всех файлов и увеличение его даже в 10 раз существенно не повлияет на оперативку.
0
4423 / 3425 / 347
Регистрация: 12.03.2013
Сообщений: 5,909
12.01.2018, 03:58 4
Из одного файла будет читаться в буфер несколько раз — до тех пор, пока ещё что-то читается (цикл в строке 18). Вроде по моим тестам проблем с большими файлами нет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2018, 03:58

Циклический импорт большого количества файлов
Доброго времени суток форумчане!:friends: Дано: 30 файлов формата txt c данными суточных...

Скачивание большого количества файлов по HTTP
Здравствуйте. Необходимо в программе сделать скачивание большого количества файлов (более 1000) по...

Чтения большого количества мелких файлов
Здравствуйте, есть какой либо способ ускорить чтение мелких файлов с диска? Есть около 8 тысяч...

Создание большого количества маленьких файлов
Не могли бы дать код простенькой программки, которая создавала бы большое количество маленьких...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.