Ich versuche mit Node.js eine Liste der Namen aller in einem Verzeichnis vorhandenen Dateien zu erhalten. Ich möchte eine Ausgabe, die ein Array von Dateinamen ist. Wie kann ich das machen?
javascript
node.js
directory-listing
resopollution
quelle
quelle
fs.readdir
funktioniert, kann aber keine Dateinamen-Glob-Muster wie verwendenls /tmp/*core*
. Schauen Sie sich github.com/isaacs/node-glob an . Globs können sogar in Unterverzeichnissen suchen.readdir-recursive
Modul, wenn Sie die Namen von Dateien auch in Unterverzeichnissen suchenAntworten:
Sie können die Methoden
fs.readdir
oderfs.readdirSync
verwenden.fs.readdir
fs.readdirSync
Der Unterschied zwischen den beiden Methoden besteht darin, dass die erste asynchron ist. Sie müssen daher eine Rückruffunktion bereitstellen, die ausgeführt wird, wenn der Lesevorgang endet.
Die zweite ist synchron. Sie gibt das Dateinamen-Array zurück, stoppt jedoch die weitere Ausführung Ihres Codes, bis der Lesevorgang endet.
quelle
readdir
Zeigt auch Verzeichnisnamen an . Verwenden Siefs.stat(path, callback(err, stats))
und, um diese zu filternstats.isDirectory()
.ls
? Warten Sie einfach, bis jemand einige Dateinamen mit eingebetteten Leerzeichen und Zeilenumbrüchen erstellt…IMO ist der bequemste Weg, solche Aufgaben zu erledigen, die Verwendung eines Glob- Tools. Hier ist ein Glob-Paket für node.js. Installieren mit
Verwenden Sie dann einen Platzhalter, um die Dateinamen abzugleichen (Beispiel von der Website des Pakets).
quelle
cwd
im Optionsobjekt.glob
außerhalb von sich selbst erhalten? Z.B. Ich möchte zuconsole.log
den Ergebnissen, aber nicht drinnenglob()
?glob.sync(pattern, [options])
Methode ist möglicherweise einfacher zu verwenden, da sie einfach ein Array von Dateinamen zurückgibt, anstatt einen Rückruf zu verwenden. Weitere Infos hier: github.com/isaacs/node-globDie obige Antwort führt jedoch keine rekursive Suche im Verzeichnis durch. Hier ist , was ich für eine rekursive Suche hat (unter Verwendung von Knoten-Spaziergang :
npm install walk
)quelle
.git
Holen Sie sich Dateien in allen Unterverzeichnissen
quelle
if (typeof files_ === 'undefined') files_=[];
? Sie müssen nurvar files_ = files_ || [];
statt tunfiles_ = files_ || [];
.var fs = require('fs');
Beginn vergessen, hinzuzufügengetFiles
.Hier ist eine einfache Lösung, bei der nur Native
fs
undpath
Module verwendet werden:oder asynchrone Version (verwendet
fs.readdir
stattdessen):Dann rufen Sie einfach an (für die Synchronisierungsversion):
oder asynchrone Version:
Der Unterschied besteht darin, wie der Knoten während der Ausführung der E / A blockiert. Da die oben genannte API identisch ist, können Sie einfach die asynchrone Version verwenden, um maximale Leistung sicherzustellen.
Die Verwendung der synchronen Version bietet jedoch einen Vorteil. Es ist einfacher, Code auszuführen, sobald der Spaziergang abgeschlossen ist, wie in der nächsten Anweisung nach dem Spaziergang. Mit der asynchronen Version benötigen Sie eine zusätzliche Methode, um zu wissen, wann Sie fertig sind. Erstellen Sie möglicherweise zuerst eine Karte aller Pfade und führen Sie sie dann auf. Für einfache Build / Util-Skripte (im Vergleich zu Hochleistungs-Webservern) können Sie die Synchronisierungsversion verwenden, ohne Schaden zu verursachen.
quelle
walkSync
vonwalk(filePath, callback);
biswalkSync(filePath, callback);
Ab Node 10.10.0 ist es möglich, die neue
withFileTypes
Option fürfs.readdir
undfs.readdirSync
in Kombination mit derdirent.isDirectory()
Funktion zum Filtern nach Dateinamen in einem Verzeichnis zu verwenden. Das sieht so aus:Das zurückgegebene Array hat folgende Form:
Dokumente für die Klasse fs.Dirent
quelle
Versprechen mit ES7 verwenden
Asynchrone Verwendung mit mz / fs
Das
mz
Modul bietet vielversprechende Versionen der Kernknotenbibliothek. Ihre Verwendung ist einfach. Installieren Sie zuerst die Bibliothek ...Dann...
Alternativ können Sie sie in ES7 in asynchrone Funktionen schreiben:
Update für rekursive Auflistung
Einige Benutzer haben den Wunsch angegeben, eine rekursive Liste anzuzeigen (obwohl nicht in der Frage enthalten) ... Verwendung
fs-promise
. Es ist eine dünne Hülle herummz
.dann...
quelle
Abhängigkeiten.
Definition.
Verwendungszweck.
Bitte beachten Sie, dass dies
fileList
viel zu optimistisch ist. Fügen Sie bei schwerwiegenden Problemen eine Fehlerbehandlung hinzu.quelle
excludeDirs
Array-Argument hinzugefügt . Es ändert es genug, so dass Sie es vielleicht stattdessen bearbeiten sollten (wenn Sie es wollen). Ansonsten werde ich es in einer anderen Antwort hinzufügen. gist.github.com/AlecTaylor/f3f221b4fb86b4375650nicht rekursive Version
Sie sagen nicht, dass Sie es rekursiv tun möchten, also nehme ich an, dass Sie nur direkte untergeordnete Elemente des Verzeichnisses benötigen.
Beispielcode:
quelle
Laden
fs
:Dateien asynchron lesen :
Lesen Sie Dateien sync :
quelle
Wenn noch jemand danach sucht, mache ich das:
und seine Arbeit ist sehr gut für mich
quelle
[...files, ...getAllFiles(name)]
oder[...files, name]
funktioniert. Ein bisschen Erklärung wäre sehr hilfreich :)...
hier verwendete wird als Spread-Syntax bezeichnet. Grundsätzlich werden alle Objekte im Array übernommen und in das neue Array "verteilt". In diesem Fall werden alle Einträge innerhalb desfiles
Arrays zusammen mit allen vom rekursiven Aufruf zurückgegebenen Werten zur Rückgabe hinzugefügt. Sie können sich hier auf die Spread-Syntax beziehen: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Erhalten Sie
sorted
Dateinamen. Sie können die Ergebnisse filtern , basierend auf einem spezifischenextension
wie'.txt'
,'.jpg'
und so weiter.quelle
Ich gehe von Ihrer Frage aus, dass Sie keine Verzeichnisnamen, sondern nur Dateien möchten.
Beispiel:
Wenn Sie nur ein Array der Dateipfade möchten, verwenden Sie
return_object: false
:kehrt zurück:
Credits gehen an https://gist.github.com/lovasoa/8691344#gistcomment-2927279
quelle
Hier ist eine asynchrone rekursive Version.
quelle
Nahm den allgemeinen Ansatz von @ Hunan-Rostomyan, machte es ein wenig prägnanter und fügte
excludeDirs
Argumente hinzu . Es wäre trivial zu erweiternincludeDirs
, folgen Sie einfach dem gleichen Muster:Anwendungsbeispiel:
quelle
Out of the Box
Für den Fall, dass Sie ein Objekt mit sofort einsatzbereiter Verzeichnisstruktur wünschen, empfehle ich Ihnen dringend, den Verzeichnisbaum zu überprüfen .
Nehmen wir an, Sie haben diese Struktur:
Wird zurückkehren:
Benutzerdefiniertes Objekt
Wenn Sie andernfalls ein Verzeichnisbaumobjekt mit Ihren benutzerdefinierten Einstellungen erstellen möchten, sehen Sie sich das folgende Snippet an. Auf dieser Codesandbox ist ein Live-Beispiel sichtbar .
Dann können Sie einfach tun:
quelle
Dies ist eine TypeScript-Lösung, optional rekursiv, optional Fehlerprotokollierung und asynchrone Lösung. Sie können einen regulären Ausdruck für die Dateinamen angeben, die Sie suchen möchten.
Ich habe verwendet
fs-extra
, weil es eine einfache Super-Set-Verbesserung istfs
.quelle
Dies funktioniert und speichert das Ergebnis in der Datei test.txt, die im selben Verzeichnis vorhanden ist
quelle
Ich habe kürzlich ein Tool dafür erstellt, das genau dies tut ... Es ruft ein Verzeichnis asynchron ab und gibt eine Liste von Elementen zurück. Sie können entweder Verzeichnisse, Dateien oder beides abrufen, wobei Ordner an erster Stelle stehen. Sie können die Daten auch paginieren, wenn Sie nicht den gesamten Ordner abrufen möchten.
https://www.npmjs.com/package/fs-browser
Dies ist der Link, hoffe es hilft jemandem!
quelle
Nur ein Hinweis: Wenn Sie vorhaben, Vorgänge für jede Datei in einem Verzeichnis auszuführen, versuchen Sie es mit vinyl-fs (das von gulp , dem Streaming-Build-System, verwendet wird).
quelle
Ich habe ein Knotenmodul erstellt, um diese Aufgabe zu automatisieren: mddir
Verwendungszweck
Knoten mddir "../relative/path/"
So installieren Sie: npm install mddir -g
So generieren Sie einen Abschlag für das aktuelle Verzeichnis: mddir
So generieren Sie für einen beliebigen absoluten Pfad: mddir / absolute / path
So generieren Sie für einen relativen Pfad: mddir ~ / Documents / Whatever.
Die MD-Datei wird in Ihrem Arbeitsverzeichnis generiert.
Ignoriert derzeit die Ordner node_modules und .git.
Fehlerbehebung
Wenn Sie die Fehlermeldung 'node \ r: Keine solche Datei oder kein solches Verzeichnis' erhalten, besteht das Problem darin, dass Ihr Betriebssystem unterschiedliche Zeilenenden verwendet und mddir diese nicht analysieren kann, ohne dass Sie den Zeilenendenstil explizit auf Unix setzen. Dies betrifft normalerweise Windows, aber auch einige Linux-Versionen. Das Festlegen von Zeilenenden auf den Unix-Stil muss im globalen bin-Ordner mddir npm erfolgen.
Zeilenenden reparieren
Holen Sie sich den npm bin Ordnerpfad mit:
npm config get prefix
CD in diesen Ordner
Gebräu installiere dos2unix
dos2unix lib / node_modules / mddir / src / mddir.js
Dadurch werden Zeilenenden in Unix anstelle von Dos konvertiert
Führen Sie dann wie gewohnt Folgendes aus: node mddir "../relative/path/".
Beispiel für eine generierte Markdown-Dateistruktur 'directoryList.md'
quelle
Verwenden Sie
npm
list-Inhalte - Modul. Es liest den Inhalt und den Unterinhalt des angegebenen Verzeichnisses und gibt die Liste der Dateipfade und Ordnerpfade zurück.quelle
quelle