我正在使用node.js,需要清空一个文件夹。我读了很多删除文件或文件夹的文章。但是我没有找到答案,如何删除我的文件夹Test
中的所有文件和文件夹,而不删除我的文件夹Test`本身。
我尝试使用fs
或extra-fs
找到解决方案。很高兴能得到一些帮助!
发布于 2021-10-13 13:43:38
您可以使用del包递归删除目录下的文件和文件夹,而不删除父目录:
Test
目录中的子目录或文件,而不删除测试目录本身: const del = Test
(“del”);del.sync(‘Test
/**’,'!Test');发布于 2021-10-13 13:56:51
EDIT 1:嘿@Harald,您应该使用del库,该库由@ziishaned发布。因为它更加干净和可伸缩。并使用我的答案来了解它是如何在幕后工作的:)
EDIT: 2(2021年12月26日):我不知道有一个名为fs.rm
的fs
方法,您可以使用它来完成只需一行代码的任务。
fs.rm(path_to_delete, { recursive: true }, callback)
// or use the synchronous version
fs.rmSync(path_to_delete, { recursive: true })
上面的代码类似于linux shell命令:rm -r path_to_delete
。
我们使用fs.unlink
和fs.rmdir
分别删除文件和空的目录。要检查路径是否表示目录,我们可以使用fs.stat()
。
因此,我们必须列出test
目录中的所有内容,并逐个删除它们。
顺便说一下,我将使用上面提到的fs
方法的synchronous版本(例如,fs.readdirSync
而不是fs.readdir
)来简化我的代码。但是如果你正在编写一个生产应用程序,那么你应该使用所有fs方法的asynchronous版本。我把这里的文档交给你去读,Node.js v14.18.1 File System documentation。
const fs = require("fs");
const path = require("path");
const DIR_TO_CLEAR = "./trash";
emptyDir(DIR_TO_CLEAR);
function emptyDir(dirPath) {
const dirContents = fs.readdirSync(dirPath); // List dir content
for (const fileOrDirPath of dirContents) {
try {
// Get Full path
const fullPath = path.join(dirPath, fileOrDirPath);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
// It's a sub directory
if (fs.readdirSync(fullPath).length) emptyDir(fullPath);
// If the dir is not empty then remove it's contents too(recursively)
fs.rmdirSync(fullPath);
} else fs.unlinkSync(fullPath); // It's a file
} catch (ex) {
console.error(ex.message);
}
}
}
如果您不理解上面代码中的任何内容,请随时问我:)
https://stackoverflow.com/questions/69555390
复制相似问题