Estoy tratando de obtener una lista de los nombres de todos los archivos presentes en un directorio usando Node.js. Quiero una salida que sea una matriz de nombres de archivo. ¿Cómo puedo hacer esto?
javascript
node.js
directory-listing
resolución
fuente
fuente
fs.readdir
funciona, pero no puede usar patrones globales de nombre de archivo comols /tmp/*core*
. Visita github.com/isaacs/node-glob . Globs incluso puede buscar en subdirectorios.readdir-recursive
embargo, compruebe el módulo de NPM si también está buscando los nombres de archivos en subdirectoriosRespuestas:
Puedes usar el
fs.readdir
ofs.readdirSync
métodos .fs.readdir
fs.readdirSync
La diferencia entre los dos métodos es que el primero es asíncrono, por lo que debe proporcionar una función de devolución de llamada que se ejecutará cuando finalice el proceso de lectura.
El segundo es síncrono, devolverá la matriz de nombre de archivo, pero detendrá cualquier ejecución posterior de su código hasta que finalice el proceso de lectura.
fuente
readdir
también muestra los nombres de directorio . Para filtrarlos, usefs.stat(path, callback(err, stats))
ystats.isDirectory()
.ls
? Solo espere hasta que alguien cree algunos nombres de archivo con espacios incrustados y líneas nuevas ...En mi opinión, la forma más conveniente de hacer tales tareas es utilizar una herramienta global . Aquí hay un paquete global para node.js. Instalar con
Luego use comodines para unir los nombres de los archivos (ejemplo tomado del sitio web del paquete)
fuente
cwd
en el objeto de opciones.glob
fuera de sí mismo? P.ej. Quieroconsole.log
los resultados, pero no dentroglob()
?glob.sync(pattern, [options])
método puede ser más fácil de usar, ya que simplemente devuelve una matriz de nombres de archivos, en lugar de usar una devolución de llamada. Más información aquí: github.com/isaacs/node-globSin embargo, la respuesta anterior no realiza una búsqueda recursiva en el directorio. Esto es lo que hice para una búsqueda recursiva (usando el nodo-paseo :
npm install walk
)fuente
.git
Obtener archivos en todos los subdirectorios
fuente
if (typeof files_ === 'undefined') files_=[];
? solo necesitas hacer envar files_ = files_ || [];
lugar defiles_ = files_ || [];
.var fs = require('fs');
al inicio degetFiles
.Aquí hay una solución simple que usa solo el nativo
fs
y lospath
módulos:o versión asíncrona (usa en su
fs.readdir
lugar):Luego solo llama (para la versión de sincronización):
o versión asíncrona:
La diferencia está en cómo se bloquea el nodo mientras se realiza el IO. Dado que la API anterior es la misma, puede usar la versión asíncrona para garantizar el máximo rendimiento.
Sin embargo, hay una ventaja de usar la versión síncrona. Es más fácil ejecutar un código tan pronto como finalice la caminata, como en la siguiente declaración después de la caminata. Con la versión asíncrona, necesitaría alguna forma adicional de saber cuándo ha terminado. Tal vez crear un mapa de todos los caminos primero, luego enumerarlos. Para los scripts de compilación / utilidad simples (en comparación con los servidores web de alto rendimiento), puede usar la versión de sincronización sin causar ningún daño.
fuente
walkSync
dewalk(filePath, callback);
awalkSync(filePath, callback);
A partir del Nodo v10.10.0, es posible utilizar la nueva
withFileTypes
opción para,fs.readdir
yfs.readdirSync
en combinación con ladirent.isDirectory()
función, filtrar los nombres de archivo en un directorio. Eso se ve así:La matriz devuelta tiene la forma:
Documentos para la clase fs.Dirent
fuente
Usando promesas con ES7
Uso asincrónico con mz / fs
El
mz
módulo proporciona versiones prometidas de la biblioteca del nodo central. Usarlos es simple. Primero instale la biblioteca ...Entonces...
Alternativamente, puede escribirlos en funciones asincrónicas en ES7:
Actualización para listado recursivo
Algunos de los usuarios han especificado el deseo de ver una lista recursiva (aunque no en la pregunta) ... Uso
fs-promise
. Es una envoltura delgadamz
.entonces...
fuente
Dependencias
Definición.
Uso.
Tenga en cuenta que
fileList
es demasiado optimista. Para cualquier cosa grave, agregue algún manejo de errores.fuente
excludeDirs
argumento de matriz también. Lo cambia lo suficiente para que tal vez deba editarlo en su lugar (si lo desea). De lo contrario, lo agregaré en una respuesta diferente. gist.github.com/AlecTaylor/f3f221b4fb86b4375650versión no recursiva
No dices que quieres hacerlo de forma recursiva, así que supongo que solo necesitas hijos directos del directorio.
Código de muestra:
fuente
Carga
fs
:Leer archivos asíncronos :
Leer archivos sincronizados :
fuente
si alguien todavía busca esto, hago esto:
y su trabajo es muy bueno para mi
fuente
[...files, ...getAllFiles(name)]
o[...files, name]
. Un poco de explicación sería muy útil :)...
utilizado aquí se llama sintaxis de propagación. Lo que básicamente hace es tomar todos los objetos dentro de la matriz y 'distribuirlos' en la nueva matriz. En este caso, todas las entradas dentro de lafiles
matriz se agregan al retorno junto con todos los valores devueltos por la llamada recursiva. Puede consultar la sintaxis extendida aquí: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Obtener
sorted
nombres de archivos. Puede filtrar los resultados en función de un elemento específicoextension
como'.txt'
,'.jpg'
etc.fuente
Supongo por su pregunta que no desea nombres de directorios, solo archivos.
Ejemplo:
Si solo desea una matriz de rutas de archivos, use
return_object: false
:devoluciones:
Los créditos van a https://gist.github.com/lovasoa/8691344#gistcomment-2927279
fuente
Aquí hay una versión recursiva asincrónica.
fuente
Tomó el enfoque general de @ Hunan-Rostomyan, lo hizo un
excludeDirs
argumento un poco más conciso y agregado . Sería trivial extenderloincludeDirs
, solo siga el mismo patrón:Ejemplo de uso:
fuente
Fuera de la caja
En caso de que desee un objeto con la estructura de directorios lista para usar, le recomiendo que revise el árbol de directorios .
Digamos que tienes esta estructura:
Volveremos:
Objeto personalizado
De lo contrario, si desea crear un objeto de árbol de directorio con su configuración personalizada, eche un vistazo al siguiente fragmento. Un ejemplo en vivo es visible en este código y cuadro .
Entonces simplemente puedes hacer:
fuente
Este es un TypeScript, opcionalmente recursivo, opcionalmente registro de errores y solución asíncrona. Puede especificar una expresión regular para los nombres de archivo que desea encontrar.
Solía
fs-extra
, porque es una mejora fácil de super setfs
.fuente
Esto funcionará y almacenará el resultado en el archivo test.txt que estará presente en el mismo directorio
fuente
Recientemente he creado una herramienta para esto que hace exactamente esto ... Obtiene un directorio de forma asincrónica y devuelve una lista de elementos. Puede obtener directorios, archivos o ambos, siendo las carpetas las primeras. También puede paginar los datos en caso de que no desee recuperar toda la carpeta.
https://www.npmjs.com/package/fs-browser
Este es el enlace, ¡espero que ayude a alguien!
fuente
Solo un aviso: si está planeando realizar operaciones en cada archivo en un directorio, pruebe vinyl-fs (que es utilizado por gulp , el sistema de compilación de transmisión).
fuente
Hice un módulo de nodo para automatizar esta tarea: mddir
Uso
nodo mddir "../relative/path/"
Para instalar: npm install mddir -g
Para generar rebajas para el directorio actual: mddir
Para generar para cualquier ruta absoluta: mddir / absolute / path
Para generar una ruta relativa: mddir ~ / Documentos / lo que sea.
El archivo md se genera en su directorio de trabajo.
Actualmente ignora los módulos node_modules y .git.
Solución de problemas
Si recibe el error 'nodo \ r: No existe tal archivo o directorio', el problema es que su sistema operativo utiliza diferentes finales de línea y mddir no puede analizarlos sin que configure explícitamente el estilo de final de línea en Unix. Esto generalmente afecta a Windows, pero también a algunas versiones de Linux. La configuración de los finales de línea al estilo Unix debe realizarse dentro de la carpeta bin global mddir npm.
Fijación de terminaciones de línea
Obtenga la ruta de la carpeta bin de npm con:
npm config get prefix
Cd en esa carpeta
instalar brew dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
Esto convierte las terminaciones de línea a Unix en lugar de Dos
Luego, ejecute normalmente con: node mddir "../relative/path/".
Ejemplo de estructura de archivo de reducción generada 'directorioLista.md'
fuente
Utilice el módulo de
npm
lista de contenidos . Lee los contenidos y sub-contenidos del directorio dado y devuelve la lista de rutas de archivos y carpetas.fuente
fuente