如何使用Node.js的fs.readdir扫描目录时忽略指定子目录
解决方法:扫描目录时忽略指定文件夹并找到最后一个UsefulFolder类目录
可以通过在目录筛选阶段添加条件,直接排除无用目录,再对有用目录排序后取最后一个,以下是修改后的完整代码:
const fs = require('fs'); const workDir = '/home/user/workDir'; fs.readdir(workDir, { withFileTypes: true }, (error, files) => { if (error) { console.log('读取工作目录时出错!\n\n'); console.log('原因: ' + error); return; } // 定义需要忽略的文件夹列表 const ignoredFolders = ['UselessFolder', 'NotThisFolder', 'SkipThisFolder']; const usefulFolders = files .filter(item => item.isDirectory() && !ignoredFolders.includes(item.name)) .map(item => item.name); // 对有用文件夹按数字后缀排序,确保顺序正确 const sortedFolders = usefulFolders.sort((a, b) => { // 提取名称中的数字,无数字则视为1 const getFolderNumber = (name) => { const match = name.match(/UsefulFolder(\d*)/); return match ? (match[1] ? parseInt(match[1], 10) : 1) : 0; }; return getFolderNumber(a) - getFolderNumber(b); }); // 获取最后一个UsefulFolder类目录 const lastUsefulFolder = sortedFolders[sortedFolders.length - 1]; if (lastUsefulFolder) { console.log('找到最后一个目标目录:', lastUsefulFolder); // 在这里添加你的后续处理逻辑 } else { console.log('未找到任何UsefulFolder类目录'); } });
关键逻辑说明
- 排除无用目录:通过
ignoredFolders数组指定需要忽略的文件夹,在filter中用!ignoredFolders.includes(item.name)过滤掉这些目录。 - 排序确保顺序:用正则提取
UsefulFolder后的数字,无数字的UsefulFolder视为序号1,排序后保证目录按UsefulFolder→UsefulFolder2→UsefulFolder3的顺序排列。 - 灵活筛选替代方案:如果所有有用目录都以
UsefulFolder开头,可以直接用item.name.startsWith('UsefulFolder')替代排除列表,无需手动维护忽略目录,新增同类目录会自动被纳入。
内容的提问来源于stack exchange,提问作者Morsmalleo
相关产品推荐
相关产品推荐

