Cómo usar `readdirSync` en Node.js para obtener todos los archivos de un directorio y sus subdirectorios.
Para procesar archivos en Node.js primero hay que buscarlos y a veces estos se encuentran en un directorio o incluso en subdirectorios anidados. Podemos usar el método del File System fs.readdirSync
para obtener estos archivos de manera recursiva.
Podemos utilizar fs.readdirSync
, junto con fs.statSync
y path.extname
, para recorrer de forma recursiva todas las carpetas desde un punto de inicio y filtrar los archivos por su extensión. Este es un patrón común en tareas como generar índices, cargar archivos de configuración o aplicar transformaciones.
const fs = require('fs');const path = require('path');
function readFilesRecursively(dir, allowedExtensions = []) { let results = [];
const entries = fs.readdirSync(dir);
for (const entry of entries) { const fullPath = path.join(dir, entry); const stats = fs.statSync(fullPath);
if (stats.isDirectory()) { results = results.concat(readFilesRecursively(fullPath, allowedExtensions)); } else { if ( allowedExtensions.length === 0 || allowedExtensions.includes(path.extname(fullPath)) ) { results.push(fullPath); } } }
return results;}
// Ejemplo: obtener sólo archivos con extensión .js y .jsonconst files = readFilesRecursively('./src', ['.js', '.json']);console.log(files);
De esta manera:
Puede adaptarse fácilmente para incluir exclusiones de carpetas, ordenar resultados o procesar cada archivo sobre la marcha.
Con una función recursiva basada en readdirSync
, es posible recorrer cualquier estructura de carpetas en Node.js para obtener todos los archivos deseados. Esta técnica, aunque síncrona, resulta útil en scripts de línea de comandos, herramientas internas o situaciones donde la simplicidad y la ejecución secuencial tienen prioridad sobre el rendimiento en concurrencia.