如何在不删除 Node.js 中的目录的情况下从目录中删除所有文件
How to remove all files from directory without removing directory in Node.js
如何使用 Node.js 从目录中删除所有文件而不删除目录本身?
我想删除临时文件。我还不擅长文件系统。
我找到了这种方法,它将删除文件和目录。在这种情况下,像/path/to/directory/*
这样的东西是行不通的。
我真的不知道应该使用什么命令。感谢您的帮助。
要从目录中删除所有文件,首先需要使用 fs.readdir
列出目录中的所有文件,然后可以使用 fs.unlink
删除每个文件。此外,fs.readdir
只会给出文件名,您需要与目录名称连接以获取完整路径。如果您的文件夹中有其他文件夹,则需要检查它并改用fs.rmdir
。
这是一个例子
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;
});
}
});
使用承诺
import fs from "node:fs/promises";
import path from "node:path";
const directory = "test";
for (const file of await fs.readdir(directory)) {
await fs.unlink(path.join(directory, file));
}
是的,有一个模块 fs-extra。此模块中.emptyDir()
有一个方法可以完成这项工作。下面是一个示例:
// NON-ES6 EXAMPLE
const fsExtra = require('fs-extra');
fsExtra.emptyDirSync(fileDir);
// ES6 EXAMPLE
import * as fsExtra from "fs-extra";
fsExtra.emptyDirSync(fileDir);
这个模块还有一个异步版本。任何人都可以查看链接。
有一个叫做rimraf的软件包非常方便。它是 UNIX 命令 rm -rf for node。
尽管如此,它也可能太强大了,因为您可以使用它非常轻松地删除文件夹。以下命令将删除文件夹中的文件。如果删除 *,则将删除日志文件夹。
const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });
https://www.npmjs.com/package/rimraf
也可以使用没有依赖关系的同步单行代码来完成:
const { readdirSync, rmSync } = require('fs');
const dir = './dir/path';
readdirSync(dir).forEach(f => rmSync(`${dir}/${f}`));
基于@Waterscroll的响应,如果你想在节点 8+ 中使用 async 和 await:
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();
简短的香草节点 10 解决方案
import fs from 'fs/promises'
await fs.readdir('folder').then((f) => Promise.all(f.map(e => fs.unlink(e))))
另一种选择:
import {mkdir, rm} from 'fs/promises';
async function clearDirectory(dirPath) {
await rm(dirPath, {recursive: true});
await mkdir(dirPath);
}
这实际上是完全删除目录(带有 rm
),但随后立即重新创建它,因此看起来它只是被清空了。这将影响文件夹元数据和可能的所有权,因此它不适用于所有用例。
运行命令行怎么样:
require('child_process').execSync('rm -rf /path/to/directory/*')
承诺版本的目录清理实用程序功能:
const fs = require('fs').promises; // promise version of require('fs');
async function cleanDirectory(directory) {
try {
await fs.readdir(directory).then((files) => Promise.all(files.map(file => fs.unlink(`${directory}/${file}`))));
} catch(err) {
console.log(err);
}
}
cleanDirectory("./somepath/myDir");
罗德里戈的答案,使用异步和承诺
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)
const fs = require("fs");
fs.rmSync(dir, { recursive: true, force: true });
如果收到此错误:
[Error: ENOENT: no such file or directory, unlink 'filename.js'] {
errno: -2,
code: 'ENOENT',
syscall: 'unlink',
path: 'filename.js'
}
添加文件夹路径
const folderPath = './Path/to/folder/'
await fs.promises.readdir(folderPath)
.then((f) => Promise.all(f.map(e => fs.promises.unlink(`${folderPath}${e}`))))
这可以通过vanilla nodejs依赖项来完成:
const fs = require('fs');
const dir = 'www/foldertoempty';
fs.readdirSync(dir).forEach(f=>fs.rmdirSync(
`${dir}/${f}`,
{
recursive : true,
force : true
}
));
添加递归和强制可确保非空文件夹也被删除。
答案的一行
:import { join } from 'path';
import { readdir, unlink } from 'fs/promises';
await Promise.all((await readdir(dir)).map((file) => unlink(join(dir, file))));
const fsExtra = require('fs-extra')
let dir = "./temp";
await fsExtra.emptyDir(dir);
❄️您可以使用graph-fs
↗️
directory.clear() // empties it
const fs = require();
fs.readdir('test', (err, files) => {
if (err) throw err;
for (let file of files)
fs.unlink('./test/' + file, (err) => {
if (err) throw err;
});
return fs.rmdir('test', (err) => {
if (err) throw err;
console.log('folder is deleted');
});
});
- Javascript:下载后从文件夹中删除文件
- 烧瓶 - 下载后删除文件
- 使用 jQuery 从 HTML 中的多个图像元素中删除文件路径
- 使用FSO创建或删除文件夹
- WinJS从LocalState文件夹中删除文件夹
- 使用 ajax 请求删除文件
- 没有文件写入的 PHP 脚本正在删除文件信息
- 如何使用javascript从文件夹中删除文件
- 使用 nodejs 下载文件后删除文件
- 如何在将文件发送到服务器之前删除文件
- 当我们使用 ajax post 请求上传文件时,如何取消将文件上传到服务器并删除文件(在上传未完成之间)
- PHP / js - 如何在页面卸载时删除文件
- 由于添加或删除文件而导致的文件冲突,引导弹出框不起作用
- 如何从Dropzone上传和删除文件.js
- 如何从 Node.js 访问、检索、存储和删除文件到远程文件服务器中
- 从 GridFS 中删除文件
- 删除文件时无法检测到 chrome 扩展名中的删除事件
- 取消链接代码以从服务器中删除文件的位置
- 如何从服务器中删除文件
- 通过 Web 界面从服务器中删除文件