Datei mit Platzhalter finden


Antworten:


82

Dies wird vom Knotenkern nicht abgedeckt. Sie können in diesem Modul nachsehen, wonach Sie suchen.

Installieren

npm i glob

Verwendung

var glob = require("glob")

// options is optional
glob("**/*.js", options, function (er, files) {
  // files is an array of filenames.
  // If the `nonull` option is set, and nothing
  // was found, then files is ["**/*.js"]
  // er is an error object or null.
})

5
Codebeispiel würde helfen.
Pavlo

3
Es ist nicht besser. Besser ist es, die Leute dazu zu bringen, die mit dem Thema verbundenen Ressourcen zu nutzen. In diesem Fall lernen Sie, NPM / npmjs.org zu verwenden.
Morgan ARR Allen

1
Es ist nicht unbedingt eine Node-Sache. Ich denke, es ist besser, auf Ressourcen hinzuweisen, die in Zukunft verwendet werden können, als nur jemandem zu zeigen, wie man etwas macht. Ich mache dasselbe mit MDN für reine JS-Fragen.
Morgan ARR Allen

5
Für den Fall, dass Sie nach einer synchronen Lösung suchen, hat die oben erwähnte Glob-Bibliothek auch eine Synchronisierungsmethode github.com/isaacs/node-glob#globsyncpattern-options
Leon Fedotov

18
@MorganARRAllen Obwohl ich damit einverstanden bin, dass die Leute die verknüpften Ressourcen verwenden sollten, ist es auch Teil des Standards für Stackoverflow, ein Beispiel dessen, was Sie beschreiben, in Ihre Antwort aufzunehmen. Ich neige dazu, beides zu tun, wie diese Antwort nach der Bearbeitung, und habe sowohl den Link als auch ein Code-Snippet. Schließlich können Links im Laufe der Zeit unterbrochen werden.
Paul

81

Wenn Sie Ihrem Projekt keine neue Abhängigkeit hinzufügen möchten (wie glob), können Sie einfache js / node-Funktionen verwenden, wie:

var files = fs.readdirSync('C:/tmp').filter(fn => fn.endsWith('.csv'));

Regex kann bei komplexeren Vergleichen helfen


11

Wenn glob nicht ganz das ist, was Sie wollen, oder ein wenig verwirrend, gibt es auch glob-fs . Die Dokumentation behandelt viele Verwendungsszenarien mit Beispielen.

// sync 
var files = glob.readdirSync('*.js', {});

// async 
glob.readdir('*.js', function(err, files) {
  console.log(files);
});

// stream 
glob.readdirStream('*.js', {})
  .on('data', function(file) {
    console.log(file);
  });

// promise 
glob.readdirPromise('*.js')
  .then(function(files) {
    console.log(file);
  });

0

Nur für den Fall, dass Sie Dateien nach Regex durchsuchen möchten (für komplexe Übereinstimmungen), sollten Sie File-Regex verwenden , der die rekursive Suche und die Parallelitätskontrolle unterstützt (für schnellere Ergebnisse).

Beispielnutzung

import FindFiles from 'file-regex'

// This will find all the files with extension .js
// in the given directory
const result = await FindFiles(__dirname, /\.js$/);
console.log(result)

-4

Erfinde das Rad nicht neu. Wenn du auf * nix bist ls, kann das Tool dies problemlos tun ( Node API Docs ).

var options = {
  cwd: process.cwd(),
}
require('child_process')
.exec('ls -1 *.csv', options, function(err, stdout, stderr){
  if(err){ console.log(stderr); throw err };
  // remove any trailing newline, otherwise last element will be "":
  stdout = stdout.replace(/\n$/, '');
  var files = stdout.split('\n');
});

6
Was ist, wenn es sich um einen Windows-PC handelt?
Pavlo

1
Ich habe es noch nie versucht, aber Sie können ein ähnliches Ergebnis mit dem Windows- dir /BBefehl versuchen. Möglicherweise müssen Sie auch aufteilen \r\n, nicht positiv
Plato

19
Ich bin stark gegen diese Art Dinge zu tun. Das Aufrufen von Befehlszeilentools aus dem Programmcode und das Parsen des Ergebnisses führen zu einer Wartungskatastrophe. Ich habe dieses Projekt einmal geerbt.
Pavlo

3
Ich lehne die Ablehnung ab. Sicherlich gibt es Anwendungsfälle, in denen globoder ein anderes Modul vorzuziehen wäre (z. B. wenn Sie auf vielen Plattformen bereitstellen möchten und sich nicht sicher sind, ob lses sich gleich verhält), aber ich halte meine Antwort nicht für schlampig oder "eindeutig oder gefährlich falsch". . "Verwenden Sie Ihre Abstimmungen immer dann, wenn Sie auf einen ungeheuer schlampigen, mühelosen Beitrag oder eine Antwort stoßen, die eindeutig und möglicherweise gefährlich falsch ist."
Plato

Dies mag eine praktische Lösung sein, aber es ist überhaupt nicht DIE Lösung. Es hat nichts mit Node.js zu tun.
MeuhMeuh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.