nodejs扫描文件夹搜索包含关键词文件,可灵活配置

news/2025/3/15 9:34:37/

代码放在在末尾

在这里插入图片描述

文件说明:

关键代码:search.js

搜索结果:searchResult.txt

搜索日志:search.log 注:只保留一次的,需要多次自行修改logFile配置即可;

使用方式:

将代码放到需要检测的目录同级,在命令行运行即可;
如下:在这里插入图片描述检测完毕后会在相同位置生成searchLog.txt保存结果;

配置项

自行在代码中搜索即可:

变量名含义
folderPath文件夹路径 ,默认当前文件夹即 ./
ignoreFolder忽略的文件夹列表,默认 .svn .project
keywordList关键词列表
whiteExt扩展名白名单:默认只检测shtml,html,js,json这几种文件类型

注: 文件编码默认为 utf-8

代码

const fs = require('fs');
const path = require('path');/** 扩展名白名单 */
const whiteExt = ['.shtml', '.json', '.html', '.js'];
/** 忽略文件夹 */
const ignoreFolder = ['.svn', '.project'];/** 根目录 */
const folderPath = './'; // 必须是/结尾的路径
/** 关键词列表 */
const keywordList = ['关键词1', '关键词2'];// 记录运行耗时
let startTime = undefined,endTime = undefined;// 输出个检测日志方便查看
var logPath = folderPath + 'search.log';
var logFile = fs.createWriteStream(logPath, { flags: 'w' }); // flags: w 代表从头开始写即覆盖原有的, a 代表从末尾开始,接着原有的写console.log = function() {logFile.write(util.format.apply(null, arguments) +'\n');process.stdout.write(util.format.apply(null, arguments) + '\n');
}/*** 递归生成文件列表 筛选白名单类型文件* @param {*} src* @param {*} filesList*/
function readFileList(src, filesList) {let files = fs.readdirSync(src);files.forEach(function (item, index) {if (ignoreFolder.includes(item)) return;let stat = fs.statSync(src + item);if (stat.isDirectory()) {console.log('检测到文件夹:' + src + item);//递归读取文件readFileList(src + item + "/", filesList)} else {if (whiteExt.includes(path.extname(src + item))) {console.log('检测到白名单文件,路径为:' + src + item);filesList.push(src + item);}}})
}const search = {getFilesList(src) {console.log('开始整理文件路径~');startTime = new Date()let FilesList = [];readFileList(src, FilesList);console.log('文件路径列表生成结束!');return FilesList;},/*** 搜索关键字* @param {String} src 路径* @param {Array} keyword 关键字列表数组* @returns {Array} 筛选出来的数组*/searchKeyword(src, keyword) {let FilesList = this.getFilesList(src);console.log('开始搜索关键字~');let newList = [];newList = FilesList.filter(x => {const content = fs.readFileSync(x, 'utf-8');for (let i = 0; i < keyword.length; i++) {console.log(x + '搜索结果:' + (content.indexOf(keyword[i]) !== -1 ? ('存在:' + keyword[i]) : '无'));return content.indexOf(keyword[i]) !== -1;}})return newList.length ? newList.length.join('/n') : '未搜索到包含关键词的文件';},/*** 写入结果* @param {*} src 路径* @param {*} text 内容*/outputLog(src, text) {fs.writeFile(src, text, err => {endTime = new Date()if (err) {console.error(err)return}//文件写入成功。console.log('搜索结束,结果已写入' + src + '\n检测耗时:' + ((endTime - startTime) / 1000) + '秒');})}
}
const searchResult = search.searchKeyword(folderPath, keywordList);
search.outputLog(folderPath + 'searchResult.txt', searchResult)
文章来源:https://blog.csdn.net/amswait/article/details/130108067
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/48309.html

相关文章

容器内无tcpdump,如何在宿主机上抓容器的包

抓包的容器里&#xff0c;没有安装tcpdump 命令&#xff0c;我们可以去容器所在宿主机上&#xff0c;使用 nsenter 命令切换网络命名空间后&#xff0c;使用宿主机上的tcpdump 命令&#xff0c;对容器进行抓包分析。 此例中&#xff0c;我要抓取容器中端口是5240的包&#xff…

【论文阅读】CVPR2023 IGEV-Stereo

用于立体匹配的迭代几何编码代价体 【cvhub导读】【paper】【code_openi】 代码是启智社区的镜像仓库&#xff0c;不需要魔法&#xff0c;点击这里注册 &#x1f680;贡献 1️⃣现有主流方法 基于代价滤波的方法和基于迭代优化的方法&#xff1a; 基于代价滤波的方法可以在c…

(转)使用Midjourney进行图生图

原文链接:使用Midjourney进行AI绘画的基础手册-虎课网 接下来,我们讲一下,如果使用Midjourney的垫图功能,创作相同风格的图片 第一步: 1、打开discord,查看自己的服务器 2、我们双击“+”,来上传图片,图片上传后,按下enter发送图片; 图片发送成功后,点击图片放大…

nginx部署VUE项目

前言 目前公司的前端代码基本都是部署在nginx下&#xff0c;特此来记录一下 开发环境&#xff1a;window10 nginx环境搭建&#xff08;参考下方文章&#xff09; window环境安装 mac环境安装 本地我将nginx放置于F盘 前端项目打包 一个nginx服务下可能会放置多个前端包&…

Keil系列教程03_主窗口和工具栏详细说明

1写在前面 本文先让大家简单认识一下Keil的主窗口界面&#xff0c;然后再进一步认识Keil的文件、编译和调试工具栏。 Toolbars工具栏就是在菜单下面的两行快捷图标按钮&#xff0c;这些快捷按钮之所以在工具栏里面&#xff0c;在于它们使用的频率较高。比如保存按钮、编译按钮…

震撼开源!首个1万多人共同标注的35种语言的高质量对话数据集来啦

文 | 小戏 “数据”&#xff01;“数据”&#xff01;“数据”&#xff01; 大模型时代&#xff0c;最珍贵的是什么&#xff1f;是 Transformer 的架构吗&#xff1f;是 RLHF 的方法吗&#xff1f; 不是&#xff01;是数据&#xff0c;是高质量的数据&#xff0c;是高质量且开源…

android so库导致的闪退及tombstone分析

android中有3种crash情况&#xff1a;未捕获的异常、ANR和闪退。未捕获的异常一般用crash文件就可以记录异常信息&#xff0c;而ANR无响应表现就是界面卡着无法响应用户操作&#xff0c;而闪退则是整个app瞬间退出&#xff0c;个人感觉对用户造成的体验最差。闪退一般是由于调用…

Revit构件显隐:参数和插件控制构件显隐性操作

一、如何通过参数来控制族中不同构件的显隐性? 在这里&#xff0c;将它分享给大家~ 首先&#xff0c;我们在项目中任意绘制一道墙&#xff0c;然后任意布置一个带有门把手的门&#xff0c;如下图&#xff1a; 接着&#xff0c;我们【双击】进入这个门族的编辑界面&#xff0c;…