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?

11voto

therightstuff Punkte 568

[BEARBEITEN: Verwendung von node.js v15.5.0]

Nachdem ich gerade versucht habe, einige der hier geposteten Lösungen zu verwenden, bin ich auf die folgende Warnung zu veralteten Funktionen gestoßen:

(node:13202) [DEP0147] Warnung vor veralteter Funktion: In zukünftigen Versionen von Node.js wird fs.rmdir(path, { recursive: true }) eine Ausnahme auslösen, wenn der Pfad nicht existiert oder eine Datei ist. Verwenden Sie stattdessen fs.rm(path, { recursive: true, force: true })

fs.rm(path, { recursive: true, force: true }); funktioniert gut, mit fs.rmSync(path, { recursive: true, force: true }); wenn Sie die blockierende Version verwenden möchten.

8voto

RonZ Punkte 367

Wenn Sie Node 8+ verwenden, asynchron arbeiten möchten und keine externen Abhängigkeiten wünschen, finden Sie hier die async/await-Version:

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

const readdir = util.promisify(fs.readdir);
const lstat = util.promisify(fs.lstat);
const unlink = util.promisify(fs.unlink);
const rmdir = util.promisify(fs.rmdir);

const removeDir = async (dir) => {
    try {
        const files = await readdir(dir);
        await Promise.all(files.map(async (file) => {
            try {
                const p = path.join(dir, file);
                const stat = await lstat(p);
                if (stat.isDirectory()) {
                    await removeDir(p);
                } else {
                    await unlink(p);
                    console.log(`Datei entfernt ${p}`);
                }
            } catch (err) {
                console.error(err);
            }
        }))
        await rmdir(dir);
        console.log(`Ordner entfernt ${dir}`);
    } catch (err) {
      console.error(err);
    }
}

7voto

Faizi Punkte 189
const fs = require("fs");
fs.rmdir("./test", { recursive: true }, (err) => {
  if (err) {
    console.error(err);
  }
});

Geben Sie die Option recursive: true an. Und es werden alle Dateien und Verzeichnisse des angegebenen Pfads rekursiv gelöscht. (Vorausgesetzt, test ist ein Verzeichnis, das sich im Stammverzeichnis befindet.)

5voto

Amit Agarwal Punkte 10149

Wenn Sie async/await bevorzugen, können Sie die fs/promises API verwenden.

const fs = require('fs/promises');

const removeDir = async (dirPath) => {
  await fs.rm(dirPath, {recursive: true});
}

Wenn Sie den Pfad einer einzelnen Datei im Ordner kennen und den Ordner löschen möchten, in dem sich diese Datei befindet.

const fs = require('fs/promises');
const path = require('path');

const removeDir = async (filePath) => {
  const { dir } = path.parse(filePath);
  await fs.rm(dir, { recursive: true });
}

5voto

Giovanni Patruno Punkte 651

2020 Update

Von Version 12.10.0 recursiveOption wurde für Optionen hinzugefügt.

Beachten Sie, dass rekursives Löschen experimentell ist.

Also würden Sie für die Synchronisation tun:

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

oder für asynchron:

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

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