561 Stimmen

Verzeichnis entfernen, das nicht leer ist

In meiner Node-Anwendung muss ich ein Verzeichnis entfernen, das einige Dateien enthält, aber fs.rmdir funktioniert nur bei leeren Verzeichnissen. Wie kann ich das machen?

720voto

Ab Node.js 14.14.0 wird empfohlen, fs.rmSync zu verwenden:

fs.rmSync(dir, { recursive: true, force: true });

391voto

Morgan ARR Allen Punkte 10115

Es gibt ein Modul dafür namens rimraf (https://npmjs.org/package/rimraf). Es bietet die gleiche Funktionalität wie rm -Rf

Asynchrone Verwendung:

var rimraf = require("rimraf");
rimraf("/some/directory", function () { console.log("erledigt"); });

Synchrone Verwendung:

rimraf.sync("/some/directory");

302voto

SharpCoder Punkte 17283

Um Ordner synchron zu entfernen

    const fs = require('fs');
    const Path = require('path');

    const deleteFolderRecursive = function (directoryPath) {
    if (fs.existsSync(directoryPath)) {
        fs.readdirSync(directoryPath).forEach((file, index) => {
          const curPath = path.join(directoryPath, file);
          if (fs.lstatSync(curPath).isDirectory()) {
           // rekursiv aufrufen
            deleteFolderRecursive(curPath);
          } else {
            // Datei löschen
            fs.unlinkSync(curPath);
          }
        });
        fs.rmdirSync(directoryPath);
      }
    };

192voto

Pierre Maoui Punkte 5518

Die meisten Leute, die fs mit Node.js verwenden, möchten Funktionen, die dem "Unix-Weg" im Umgang mit Dateien nahe kommen. Ich benutze fs-extra, um all die coolen Sachen zu haben :

fs-extra enthält Methoden, die nicht im Standard-Node.js fs Paket enthalten sind. Dazu gehören mkdir -p, cp -r und rm-rf.

Noch besser ist, dass fs-extra ein einfacher Ersatz für das native fs ist. Alle Methoden in fs sind unverändert und daran angehängt. Das bedeutet, dass du fs durch fs-extra ersetzen kannst :

// dies kann ersetzt werden
const fs = require('fs')

// durch dies
const fs = require('fs-extra')

Und dann kannst du einen Ordner auf diese Weise entfernen:

fs.removeSync('/tmp/myFolder'); 
//oder
fs.remove('/tmp/myFolder', callback);

43voto

Elliot Plant Punkte 488

Ab Node v14 (Oktober 2020) hat das fs Modul fs.rm und fs.rmSync, die rekursives Löschen von nicht leeren Verzeichnissen unterstützen:

https://nodejs.org/docs/latest-v14.x/api/fs.html#fs_fs_rm_path_options_callback

Jetzt können Sie etwas wie dies tun:

const fs = require('fs');
fs.rm('/path/to/delete', { recursive: true }, () => console.log('done'));

oder:

const fs = require('fs');
fs.rmSync('/path/to/delete', { recursive: true });
console.log('done');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X