Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Поиск файлов (https://javascript.ru/forum/node-js-io-js/76129-poisk-fajjlov.html)

Epitough 07.12.2018 16:30

Поиск файлов
 
Привет! Есть этот способ, но он довольно медленный. Можно ли сделать подобное быстрее?

Alexandroppolus 07.12.2018 17:12

Epitough,
следующим ответом по ссылке есть require('child_process').execFile

подозреваю что если дерево папок развесистое, то этот вариант уделает по скорости все остальные.

Epitough 07.12.2018 20:12

Это мне не подходит.
Сделал вот такое:
const walk = (start, callback) => {
    let res = [];
    fs.lstat(start, (err, stat) => {
        if (err) {
            return callback(err)
        }
        if (stat.isDirectory()) {
            fs.readdir(start, (err, files) => {
                let coll = files.reduce((acc, i) => {
                    let abspath = path.join(start, i);
                    if (fs.statSync(abspath).isDirectory()) {
                        walk(abspath, callback);
                            acc.push(abspath);
                    } else {
                            acc.push(abspath);
                    }
                    return acc;
                }, []);
                res = res.concat(coll);
                return callback(start, res);
            });
        } else {
            return callback(new Error("path: " + start + " is not a directory"));
        }
    })
};
Не подскажешь как сделать вывод одного массива с результатами? А еще лучше что бы массив уже формировался в функции


Часовой пояс GMT +3, время: 12:52.