J'essaie d'obtenir une liste des noms de tous les fichiers présents dans un répertoire en utilisant Node.js. Je veux une sortie qui est un tableau de noms de fichiers. Comment puis-je faire ceci?
javascript
node.js
directory-listing
resopollution
la source
la source
fs.readdir
fonctionne, mais ne peut pas utiliser des modèles glob de nom de fichier commels /tmp/*core*
. Consultez github.com/isaacs/node-glob . Les globes peuvent même rechercher dans des sous-répertoires.readdir-recursive
module de NPM si vous recherchez également les noms des fichiers dans les sous-répertoiresRéponses:
Vous pouvez utiliser les méthodes
fs.readdir
oufs.readdirSync
.fs.readdir
fs.readdirSync
La différence entre les deux méthodes est que la première est asynchrone, vous devez donc fournir une fonction de rappel qui sera exécutée à la fin du processus de lecture.
Le second est synchrone, il renverra le tableau des noms de fichiers, mais il arrêtera toute autre exécution de votre code jusqu'à la fin du processus de lecture.
la source
readdir
affiche également les noms de répertoire . Pour les filtrer, utilisezfs.stat(path, callback(err, stats))
etstats.isDirectory()
.ls
? Attendez juste que quelqu'un crée des noms de fichiers avec des espaces intégrés et des nouvelles lignes…OMI, la façon la plus pratique d'effectuer de telles tâches est d'utiliser un outil global . Voici un package glob pour node.js. Installer avec
Ensuite, utilisez un caractère générique pour faire correspondre les noms de fichiers (exemple tiré du site Web du package)
la source
cwd
dans l'objet options.glob
extérieur de lui-même? Par exemple. Je veuxconsole.log
les résultats, mais pas à l'intérieurglob()
?glob.sync(pattern, [options])
méthode peut être plus facile à utiliser car elle renvoie simplement un tableau de noms de fichiers, plutôt que d'utiliser un rappel. Plus d'infos ici: github.com/isaacs/node-globLa réponse ci-dessus n'effectue cependant pas de recherche récursive dans le répertoire. Voici ce que je l'ai fait pour une recherche récursive ( en utilisant le noeud de marche :
npm install walk
)la source
.git
Obtenez des fichiers dans tous les sous-répertoires
la source
if (typeof files_ === 'undefined') files_=[];
? vous n'avez qu'à faire à lavar files_ = files_ || [];
place defiles_ = files_ || [];
.var fs = require('fs');
au début degetFiles
.Voici une solution simple utilisant uniquement les modules natifs
fs
etpath
:ou version asynchrone (utilise à la
fs.readdir
place):Ensuite, vous appelez simplement (pour la version de synchronisation):
ou version asynchrone:
La différence réside dans la façon dont le nœud se bloque lors de l'exécution des E / S. Étant donné que l'API ci-dessus est la même, vous pouvez simplement utiliser la version asynchrone pour garantir des performances maximales.
Cependant, il existe un avantage à utiliser la version synchrone. Il est plus facile d'exécuter du code dès que la marche est terminée, comme dans l'instruction suivante après la marche. Avec la version asynchrone, vous auriez besoin d'un moyen supplémentaire de savoir quand vous avez terminé. Peut-être en créant d'abord une carte de tous les chemins, puis en les énumérant. Pour les scripts de construction / utilisation simples (par rapport aux serveurs Web hautes performances), vous pouvez utiliser la version de synchronisation sans causer de dommages.
la source
walkSync
dewalk(filePath, callback);
àwalkSync(filePath, callback);
Depuis Node v10.10.0, il est possible d'utiliser la nouvelle
withFileTypes
option pourfs.readdir
etfs.readdirSync
en combinaison avec ladirent.isDirectory()
fonction de filtrage des noms de fichiers dans un répertoire. Cela ressemble à ceci:Le tableau retourné est sous la forme:
Documents pour la classe fs.Dirent
la source
Utilisation de promesses avec ES7
Utilisation asynchrone avec mz / fs
Le
mz
module fournit des versions promises de la bibliothèque de nœuds principaux. Leur utilisation est simple. Installez d'abord la bibliothèque ...Alors...
Vous pouvez également les écrire dans des fonctions asynchrones dans ES7:
Mise à jour de la liste récursive
Certains utilisateurs ont indiqué leur souhait de voir une liste récursive (mais pas dans la question) ... Utiliser
fs-promise
. C'est un mince emballage autourmz
.puis...
la source
Dépendances.
Définition.
Usage.
Veuillez noter que
fileList
c'est beaucoup trop optimiste. Pour tout problème grave, ajoutez une gestion des erreurs.la source
excludeDirs
argument de tableau. Il le change suffisamment pour que vous puissiez le modifier à la place (si vous le souhaitez). Sinon, je vais l'ajouter dans une réponse différente. gist.github.com/AlecTaylor/f3f221b4fb86b4375650version non récursive
Vous ne dites pas que vous voulez le faire récursivement donc je suppose que vous n'avez besoin que des enfants directs du répertoire.
Exemple de code:
la source
Charge
fs
:Lire des fichiers asynchrones :
Lire la synchronisation des fichiers :
la source
si quelqu'un cherche toujours ceci, je fais ceci:
et son travail est très bon pour moi
la source
[...files, ...getAllFiles(name)]
ou[...files, name]
. Un peu d'explication serait très utile :)...
utilisé ici est appelé une syntaxe étalée. Ce qu'il fait, c'est de prendre tous les objets à l'intérieur du tableau et de les «propager» dans le nouveau tableau. Dans ce cas, toutes les entrées à l'intérieur dufiles
tableau sont ajoutées au retour avec toutes les valeurs renvoyées par l'appel récursif. Vous pouvez vous référer à la syntaxe étendue ici: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Obtenez des
sorted
noms de fichiers. Vous pouvez filtrer les résultats en fonction d'un élément spécifiqueextension
tel que'.txt'
,'.jpg'
etc.la source
Je suppose de votre question que vous ne voulez pas de noms de répertoires, juste des fichiers.
Exemple:
Si vous voulez juste un tableau des chemins de fichiers, utilisez
return_object: false
:Retour:
Les crédits vont à https://gist.github.com/lovasoa/8691344#gistcomment-2927279
la source
Voici une version récursive asynchrone.
la source
A adopté l'approche générale de @ Hunan-Rostomyan, en a fait un petit
excludeDirs
argument plus concis et ajouté . Il serait trivial d'étendre avecincludeDirs
, suivez simplement le même modèle:Exemple d'utilisation:
la source
Hors de la boîte
Dans le cas où vous souhaitez un objet avec la structure de répertoire prête à l'emploi, je vous recommande fortement de vérifier arborescence .
Disons que vous avez cette structure:
Reviendra:
Objet personnalisé
Sinon, si vous souhaitez créer un objet d'arborescence de répertoires avec vos paramètres personnalisés, consultez l'extrait de code suivant. Un exemple en direct est visible sur ce codeandbox .
Ensuite, vous pouvez simplement faire:
la source
Il s'agit d'une solution TypeScript, éventuellement récursive, optionnellement de journalisation des erreurs et asynchrone. Vous pouvez spécifier une expression régulière pour les noms de fichiers que vous souhaitez rechercher.
J'ai utilisé
fs-extra
, car c'est une super amélioration facile surfs
.la source
Cela fonctionnera et stockera le résultat dans le fichier test.txt qui sera présent dans le même répertoire
la source
J'ai récemment construit un outil pour cela qui fait juste cela ... Il récupère un répertoire de manière asynchrone et retourne une liste d'éléments. Vous pouvez obtenir des répertoires, des fichiers ou les deux, les dossiers étant les premiers. Vous pouvez également paginer les données dans le cas où vous ne souhaitez pas récupérer l'intégralité du dossier.
https://www.npmjs.com/package/fs-browser
Ceci est le lien, j'espère qu'il aide quelqu'un!
la source
Attention: si vous prévoyez d'effectuer des opérations sur chaque fichier d'un répertoire, essayez vinyl-fs (qui est utilisé par gulp , le système de génération de streaming).
la source
J'ai fait un module de noeud pour automatiser cette tâche: mddir
Usage
noeud mddir "../relative/path/"
Pour installer: npm install mddir -g
Pour générer une démarque pour le répertoire actuel: mddir
Pour générer pour tout chemin absolu: mddir / absolu / chemin
Pour générer un chemin relatif: mddir ~ / Documents / que ce soit.
Le fichier md est généré dans votre répertoire de travail.
Ignore actuellement les modules node_modules et .git.
Dépannage
Si vous recevez l'erreur «nœud \ r: aucun fichier ou répertoire», le problème est que votre système d'exploitation utilise différentes fins de ligne et mddir ne peut pas les analyser sans que vous définissiez explicitement le style de fin de ligne sur Unix. Cela affecte généralement Windows, mais aussi certaines versions de Linux. La définition des fins de ligne sur le style Unix doit être effectuée dans le dossier bin global mddir npm.
Correction des fins de ligne
Obtenez le chemin du dossier bin npm avec:
npm config get prefix
Cd dans ce dossier
installer brew dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
Cela convertit les fins de ligne en Unix au lieu de Dos
Exécutez ensuite normalement avec: node mddir "../relative/path/".
Exemple de structure de fichier de démarque générée 'directoryList.md'
la source
Utilisez le module
npm
list-contents . Il lit le contenu et le sous-contenu du répertoire donné et renvoie la liste des chemins des fichiers et des dossiers.la source
la source