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?

1voto

HankMoody Punkte 2999

Ultraschnell und fehlerfrei

Sie können das lignator-Paket (https://www.npmjs.com/package/lignator) verwenden, es ist schneller als jeder asynchrone Code (z.B. rimraf) und ausfallsicherer (besonders unter Windows, wo die Dateientfernung nicht sofort erfolgt und Dateien möglicherweise von anderen Prozessen gesperrt sind).

4,36 GB an Daten, 28.042 Dateien, 4.217 Ordner auf Windows in 15 Sekunden entfernt im Vergleich zu rimraf's 60 Sekunden auf einer alten Festplatte.

const lignator = require('lignator');

lignator.remove('./build/');

1voto

Juanma Menendez Punkte 12373

2020 Antwort

Wenn Sie dies in einem npm-Skript tun möchten, müssen Sie kein Drittprogramm installieren, wenn Sie den Befehl npx verwenden

Wenn Sie beispielsweise die Ordner dist und .cache löschen möchten, wenn Sie npm run clean ausführen, fügen Sie einfach diesen Befehl zu Ihrer package.json hinzu

{
  "scripts": {
    "clean": "npx rimraf dist .cache"
  }
}

Es funktioniert in jedem Betriebssystem

1voto

MetaTron Punkte 627

Ordner entfernen mit den Dateien oder nur einer Datei.

Ich bin nicht sehr großzügig oder hilfreich, aber ich konnte keine gute Lösung für dieses Problem finden und musste meinen eigenen Weg finden... also hoffe ich, dass es Ihnen gefällt :)

Funktioniert perfekt für mich mit jeder Anzahl von verschachtelten Verzeichnissen und Unterverzeichnissen. Achten Sie auf den Bereich von 'this' beim rekursiven Aufruf der Funktion, Ihre Implementierung könnte anders sein. In meinem Fall bleibt diese Funktion im Rückgabewert einer anderen Funktion, deshalb rufe ich sie mit 'this' auf.

    const fs = require('fs');

    deleteFileOrDir(path, pathTemp = false){
            if (fs.existsSync(path)) {
                if (fs.lstatSync(path).isDirectory()) {
                    var files = fs.readdirSync(path);
                    if (!files.length) return fs.rmdirSync(path);
                    for (var file in files) {
                        var currentPath = path + "/" + files[file];
                        if (!fs.existsSync(currentPath)) continue;
                        if (fs.lstatSync(currentPath).isFile()) {
                            fs.unlinkSync(currentPath);
                            continue;
                        }
                        if (fs.lstatSync(currentPath).isDirectory() && !fs.readdirSync(currentPath).length) {
                            fs.rmdirSync(currentPath);
                        } else {
                            this.deleteFileOrDir(currentPath, path);
                        }
                    }
                    this.deleteFileOrDir(path);
                } else {
                    fs.unlinkSync(path);
                }
            }
            if (pathTemp) this.deleteFileOrDir(pathTemp);
        }

0voto

Yairopro Punkte 6777

Sie können graph-fs verwenden

directory.delete()

0voto

Erisan Olasheni Punkte 1808
const fs = require("fs")
const path = require("path")

let _dirloc = ''

if (fs.existsSync(_dirloc)) {
  fs.readdir(path, (err, files) => {
    if (!err) {
      for (let file of files) {
        // Lösche jede Datei
        fs.unlinkSync(path.join(_dirloc, file))
      }
    }
  })
  // Nach dem 'done' jeder Dateilöschung,
  // Lösche das Verzeichnis selbst.
  if (fs.unlinkSync(_dirloc)) {
    console.log('Directory has been deleted!')
  }
}

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