Hoe verwijder je alle bestanden uit een map zonder een map zelf te verwijderen met Node.js?
Ik wil tijdelijke bestanden verwijderen. Ik ben nog niet goed met bestandssystemen.
Ik heb dezemethode gevonden, waarmee bestanden en de directory worden verwijderd. Daarin zal iets als /path/to/directory/*
niet werken.
Ik weet niet echt welke commando’s moeten worden gebruikt. Bedankt voor de hulp.
Antwoord 1, autoriteit 100%
Om alle bestanden uit een map te verwijderen, moet u eerst alle bestanden in de map weergeven met behulp van fs.readdir
, daarna kunt u fs.unlink
gebruiken om ze te verwijderen het dossier. Ook zal fs.readdir
alleen de bestandsnamen geven, je moet de mapnaam samenvoegen om het volledige pad te krijgen.
Hier is een voorbeeld
const fs = require('fs');
const path = require('path');
const directory = 'test';
fs.readdir(directory, (err, files) => {
if (err) throw err;
for (const file of files) {
fs.unlink(path.join(directory, file), err => {
if (err) throw err;
});
}
});
Antwoord 2, autoriteit 37%
Ja, er is een module fs-extra. Er is een methode .emptyDir()
binnen deze module die het werk doet. Hier is een voorbeeld:
const fsExtra = require('fs-extra')
fsExtra.emptyDirSync(fileDir)
Er is ook een asynchrone versie van deze module. Iedereen kan de link bekijken.
Antwoord 3, autoriteit 18%
Er is een pakket genaamd rimraf dat erg handig is. Het is het UNIX-commando rm -rf voor node.
Desalniettemin kan het ook te krachtig zijn omdat je er heel gemakkelijk mappen mee kunt verwijderen. Met de volgende opdrachten worden de bestanden in de map verwijderd. Als u de * verwijdert, verwijdert u de logmap.
const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });
https://www.npmjs.com/package/rimraf
Antwoord 4, autoriteit 9%
Voortbouwend op de reactie van @Waterscroll, als u async wilt gebruiken en in node 8+ wilt wachten:
const fs = require('fs');
const util = require('util');
const readdir = util.promisify(fs.readdir);
const unlink = util.promisify(fs.unlink);
const directory = 'test';
async function toRun() {
try {
const files = await readdir(directory);
const unlinkPromises = files.map(filename => unlink(`${directory}/${filename}`));
return Promise.all(unlinkPromises);
} catch(err) {
console.log(err);
}
}
toRun();
Antwoord 5, autoriteit 2%
Korte vanilla Node 10-oplossing
import fs from 'fs/promises'
await fs.readdir('folder').then((f) => Promise.all(f.map(e => fs.unlink(e))))
Antwoord 6, autoriteit 2%
Het kan ook met een synchrone oneliner zonder afhankelijkheden:
const { readdirSync, rmSync } = require('fs');
const dir = './dir/path';
readdirSync(dir).forEach(f => rmSync(`${dir}/${f}`));
Antwoord 7
Hoe zit het met het uitvoeren van een opdrachtregel:
require('child_process').execSync('rm -rf /path/to/directory/*')
Antwoord 8
Verbetering van Rodrigo’s antwoord, met behulp van async en beloften
const fs = require('fs').promises;
const path = require('path');
const directory = 'test';
let files = [];
try{
files = await fs.readdir(directory);
}
catch(e){
throw e;
}
if(!files.length){
return;
}
const promises = files.map(e => fs.unlink(path.join(directory, e)));
await Promise.all(promises)
Antwoord 9
Als u deze foutmelding krijgt:
[Error: ENOENT: no such file or directory, unlink 'filename.js'] {
errno: -2,
code: 'ENOENT',
syscall: 'unlink',
path: 'filename.js'
}
Voeg het mappad toe in
const folderPath = './Path/to/folder/'
await fs.promises.readdir(folderPath)
.then((f) => Promise.all(f.map(e => fs.promises.unlink(`${folderPath}${e}`))))
Antwoord 10
🚀 graph-fs
Installeren
npm i graph-fs
Gebruik
const {Node} = require("graph-fs");
const directory = new Node("/path/to/directory");
directory.clear(); // <--