如何删除javascript/node.js中当前目录下的多个PDF文件



我想删除当前目录下以.pdf结尾的多个文件。假设我有3个不同的pdf文件,一个图像文件和一个文本文件,所以在这些,我想要删除这三个不同的pdf文件,只有.

我已经试过了。

1的方法fs.unlinkSync('./'+*+pdfname);→我知道这没有意义

2方法

try {
var files = (here the list of files should come. However i am failing to get those);
var path="./"
files.forEach(path => fs.existsSync(path) && fs.unlinkSync(path))
} catch (err) {
console.error("not exist")
}

任何不同的方法都将是感激的。

解决方案更新:

我已经得到了我的要求的解决方案,我只是想让我的函数删除所有的pdf文件和函数是同步的。然而,99%的解决方案由以下作者给出->https://stackoverflow.com/a/66558251/11781464

fs.readdir是异步的,只需要使其同步fs.readdirSync

下面是更新后的代码,所有的功劳都应该归作者https://stackoverflow.com/a/66558251/11781464。

<<p>更新代码/strong>
try {
const path = './'
// Read the directory given in `path`
fs.readdirSync(path).forEach((file) => {
// Check if the file is with a PDF extension, remove it
if (file.split('.').pop().toLowerCase() === 'pdf') {
console.log(`Deleting file: ${file}`);
fs.unlinkSync(path + file)
}
});
console.log("Deleted all the pdf files")
return true;
} catch (err) {
console.error("Error in deleting files",err);
}

您可以使用fs.readdir读取目录,然后检查PDF文件并删除它们。这样的:

fs = require('fs');
try {
path = './'
// Read the directory given in `path`
const files = fs.readdir(path, (err, files) => {
if (err)
throw err;
files.forEach((file) => { 
// Check if the file is with a PDF extension, remove it
if (file.split('.').pop().toLowerCase() == 'pdf') {
console.log(`Deleting file: ${file}`);
fs.unlinkSync(path + file)
}
});
});
} catch (err) {
console.error(err);
}

初步阅读

  • Node.js进程的当前工作目录-参见下面的更新答案

  • 路径方法

    • resolve
    • extName
  • 文件系统方法

    • fs.readdirSync
    • fs.unlinkSync

    和类

    • dirent

示例

"use strict";
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
fs.readdirSync( cwd, {withFileTypes: true})
.forEach( dirent => {
if(dirent.isFile()) {
const fileName = dirent.name;
if( path.extname(fileName).toLowerCase() === ".pdf") {
fs.unlinkSync( path.resolve( cwd, fileName));
}
}
});
指出

  1. 未测试的代码
  2. 如果unlinkSync失败,我会假设它返回-1按照unlink(2)手册页链接的文档。我个人会使用cwd中不存在的文件名进行测试。
  3. 我相信readdirSync{withFileTypes: true}选项返回具有mime类型值的dirent对象,允许您检查application/pdf类型的文件,无论扩展名如何(在示例中未尝试)。

Update:默认情况下,path(resolve)在返回路径的开头添加当前工作目录。在示例中,path.resolve(fileName)将与path.resolve(cwd, fileName)一样工作。

似乎你知道如何删除(unlink)文件-你在问如何获得文件路径?

尝试使用glob:

const pdfFiles = require("glob").globSync("*.pdf");

嗨,我在这里附加测试代码删除所有(仅).pdf文件,而不是其他扩展文件,如。txt,。docs等目录。

注意:只能从服务器端删除任何文件或目录。

const fs = require('fs');
const path = require('path')
fs.readdir('../path to directory', (err, files) => {
const pdfFiles = files.filter(el => path.extname(el) === '.pdf')
pdfFiles.forEach(file => {
console.log("Removing File -> ",file);
var filename = "../path to directory/"+file;
fs.unlink(filename,function(err){
if(err) return console.log(err);
console.log('file deleted successfully');
});  
});
});

这将在控制台日志中给出如下结果:

删除文件->note.pdf
删除文件->Note2.pdf
文件删除成功
文件删除成功

如果有任何疑问,请随时评论。