Показать сообщение отдельно
  #1 (permalink)  
Старый 20.12.2022, 17:56
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Как узнать наличие файла, зная только часть его имени?
Привет! Как в Node.js найти файл(ы) (или проверить его/их существование), зная только часть его имени?

Н-р, мы хотим узнать существует ли в директории "/path/" файл(ы) с именем, в котором присутствует строка "298AA5B8".

В зависимости от ситуации требуется вывести либо только самый последний файл, либо список всех файлов в названии которых есть указанная строка (отсортированный по времени).

Допустим, в директории "/path/" имеются следующие файлы:
  • AJSDA484_LFK4883G_20049562.txt
  • AJSDA484_LFK4883G_20037853.txt
  • LFK4883G_AJSDA484_20037853.txt
  • 298AA5B8_AJSDA484_18477588.txt
  • LFK4883G_298AA5B8_93874223.txt
... может быть оооооочень много файлов


Предполагаемая реализация:
const fs = require("fs");
const string = '298AA5B8';

fs.findFile('/path/', string, function(error, result){
    if (error) {
        console.log("Файл не найден");
    } else {
        console.log(result);
        //298AA5B8_AJSDA484_18477588.txt — самый последний добавленный файл с разыскиваемой строкой в имени
    }
});

Важно чтобы функция сразу заканчивала свою работу как найдёт первое вхождение.



Если надо все файлы, где встречается строка в имени, то предполагаемая реализация такая:

const fs = require("fs");
const string = '298AA5B8';

fs.findFiles('/path/', string, function(error, result){
    if (error) {
        console.log("Файл не найден");
    } else {
        console.log(result);
        //Выведет массив файлов
        //['298AA5B8_AJSDA484_18477588.txt','LFK4883G_298AA5B8_93874223.txt'];

    }
});




В настоящий момент удалось найти только поиск по конкретному названию файла:

const fs = require("fs");

fs.access("filename.txt", function(error){
    if (error) {
        console.log("Файл не найден");
    } else {
        console.log("Файл найден");
    }
});


или

const fs = require("fs");

fs.stat("filename.txt", function(err, stats) {
    if (err) {
        console.log("Файл не найден");
    } else {
        console.log("Файл найден");
    }
});



Существует ли в Node.js функциональность, чтобы найти файл/ы (или проверить их существование), зная только часть их имени?


P.S. аналогия здесь может быть с SQL:
"SELECT * FROM files WHERE param1 = 'string' OR param2 = 'string' ORDER BY time DESC LIMIT 1";


или для массива файлов:
"SELECT * FROM files WHERE param1 = 'string' OR param2 = 'string' ORDER BY time DESC";
Ответить с цитированием