Solución:
Parece el glob
El paquete npm te ayudaría. Aquí hay un ejemplo de cómo usarlo:
Jerarquía de archivos:
test
├── one.html
└── test-nested
└── two.html
Código JS:
const glob = require("glob");
var getDirectories = function (src, callback) {
glob(src + '/**/*', callback);
};
getDirectories('test', function (err, res) {
if (err) {
console.log('Error', err);
} else {
console.log(res);
}
});
que muestra:
[ 'test/one.html',
'test/test-nested',
'test/test-nested/two.html' ]
Aquí está el mío. Como todas las buenas respuestas, es difícil de entender:
const isDirectory = path => statSync(path).isDirectory();
const getDirectories = path =>
readdirSync(path).map(name => join(path, name)).filter(isDirectory);
const isFile = path => statSync(path).isFile();
const getFiles = path =>
readdirSync(path).map(name => join(path, name)).filter(isFile);
const getFilesRecursively = (path) => {
let dirs = getDirectories(path);
let files = dirs
.map(dir => getFilesRecursively(dir)) // go through each directory
.reduce((a,b) => a.concat(b), []); // map returns a 2d array (array of file arrays) so flatten
return files.concat(getFiles(path));
};
He visto muchas respuestas muy largas y es una especie de pérdida de espacio en la memoria. Algunos también usan paquetes como glob
, pero si no quiere depender de ningún paquete, aquí está mi solución.
const Path = require("path");
const FS = require("fs");
let Files = [];
function ThroughDirectory(Directory) {
FS.readdirSync(Directory).forEach(File => {
const Absolute = Path.join(Directory, File);
if (FS.statSync(Absolute).isDirectory()) return ThroughDirectory(Absolute);
else return Files.push(Absolute);
});
}
ThroughDirectory("./input/directory/");
Es bastante evidente. Hay un directorio de entrada y lo recorre en iteración. Si uno de los elementos también es un directorio, revise ese y así sucesivamente. Si es un archivo, agregue la ruta absoluta a la matriz.
Espero que esto haya ayudado:]
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)