Hoe verwijder je alle bestanden uit de map zonder de map in Node.js te verwijderen

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.unlinkgebruiken om ze te verwijderen het dossier. Ook zal fs.readdiralleen 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(); // <--

Other episodes