Как рекурсивно получить структурированный массив всех файлов и папок в указанной директории?

В Node.js можно рекурсивно получить структурированный массив всех файлов и папок в указанной директории с помощью рекурсивной функции и модуля fs.

Первым шагом нам понадобится подключить модуль fs, который обеспечивает доступ к файловой системе:

const fs = require('fs');

Затем мы определим функцию getFilesAndFolders, которая будет принимать путь к директории в качестве аргумента и возвращать структурированный массив:

function getFilesAndFolders(directory) {
  // создаем пустой массив для хранения файлов и папок
  let filesAndFolders = [];

  // получаем список файлов и папок в указанной директории
  const list = fs.readdirSync(directory);

  // перебираем каждый элемент в списке
  list.forEach(item => {
    // получаем полный путь к файлу или папке
    const fullPath = `${directory}/${item}`;

    // проверяем, является ли элемент файлом или папкой
    const isDirectory = fs.statSync(fullPath).isDirectory();

    // добавляем элемент в массив
    filesAndFolders.push({
      name: item, // имя файла или папки
      path: fullPath, // полный путь к файлу или папке
      isDirectory: isDirectory, // флаг, показывающий, является ли элемент папкой
    });

    // если элемент является папкой, вызываем рекурсивно функцию getFilesAndFolders
    if (isDirectory) {
      filesAndFolders = filesAndFolders.concat(getFilesAndFolders(fullPath));
    }
  });

  return filesAndFolders;
}

Теперь мы можем вызывать функцию getFilesAndFolders, указывая путь к директории в качестве аргумента, и получать структурированный массив всех файлов и папок:

const directory = 'путь/к/директории'; // замените на свой путь

const filesAndFolders = getFilesAndFolders(directory);

console.log(filesAndFolders);

Обратите внимание, что данное решение использует синхронные методы readdirSync и statSync, которые блокируют выполнение программы до завершения операций чтения файловой системы. Такой подход может быть неподходящим в случае, если в директории находится большое количество файлов или папок. В таком случае рекомендуется использовать асинхронные методы и операции с колбэками или промисами.