javascript-如何从目录中删除所有文件而不在Node.js中删除目录

如何使用Node.js从目录中删除所有文件而又不删除目录本身?
我想删除临时文件。 我对文件系统还不好。

我找到了此方法,它将删除文件和目录。 那样的话,像/path/to/directory/*这样的东西将无法工作。

我真的不知道应该使用什么命令。 谢谢您的帮助。

youbetternot asked 2019-11-12T00:05:00Z
4个解决方案
106 votes

要从目录中删除所有文件,首先需要使用fs.readdir列出目录中的所有文件,然后可以使用fs.unlink删除每个文件。 另外fs.readdir只会给出文件名,您需要与目录名合并以获取完整路径。

这是一个例子

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;
    });
  }
});
Waterscroll answered 2019-11-12T00:10:55Z
21 votes

有称为rimraf的软件包,非常方便。 这是用于节点的UNIX命令rm -rf。

但是,它也可能太强大了,因为您可以使用它很容易地删除文件夹。 以下命令将删除文件夹中的文件。 如果删除*,则将删除日志文件夹。

const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });

[https://www.npmjs.com/package/rimraf]

Nicolas Guérinet answered 2019-11-12T00:11:31Z
14 votes

是的,有一个模块fs-extra。 该模块内部有一种方法.emptyDir()可完成此工作。 这是一个例子:

const fsExtra = require('fs-extra')

fsExtra.emptyDirSync(fileDir)

该模块也有一个异步版本。 任何人都可以签出链接。

Samiul Alam answered 2019-11-12T00:12:03Z
10 votes

如果要在节点8+中使用async并等待,请以@Waterscroll的响应为基础:

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();
Jason Kim answered 2019-11-12T00:12:27Z
translate from https://stackoverflow.com:/questions/27072866/how-to-remove-all-files-from-directory-without-removing-directory-in-node-js