如何使用Node.js从目录中删除所有文件而不删除目录本身?
我想删除临时文件。我对文件系统还不好。
我已经找到了此方法,它将删除文件和目录。在那种情况下,类似的东西/path/to/directory/*将无法工作。
我真的不知道应该使用什么命令。谢谢您的帮助。
如何使用Node.js从目录中删除所有文件而不删除目录本身?
我想删除临时文件。我对文件系统还不好。
我已经找到了此方法,它将删除文件和目录。在那种情况下,类似的东西/path/to/directory/*将无法工作。
我真的不知道应该使用什么命令。谢谢您的帮助。
Answers:
要从目录中删除所有文件,首先需要使用列出目录中的所有文件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;
});
}
});
recursive您可以使用一个标志来rmdir递归地删除所有文件。有关更多信息,请参见nodejs文档。
const fs = require('fs').promises;
const directory = 'test';
fs.rmdir(directory, { recursive: true })
.then(() => console.log('directory removed!'));
fs.readdirSync。只需分配所有文件:const files = fs.readdirSync(directory);并以相同的方式循环for (const file of files) {。
有称为rimraf的软件包,非常方便。它是用于节点的UNIX命令rm -rf。
但是,它也可能太强大了,因为您可以使用它很容易地删除文件夹。以下命令将删除文件夹中的文件。如果删除*,将删除日志文件夹。
const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });
如果您要在节点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();
return await Promise是多余的。你可以做return Promise。该toRun函数是异步的,因此当返回promise时,应用程序可以等待它。
const { promises: fs } = require('fs');我相信您现在可以从节点10+使用。