`

Nodejs实现VScode搜索功能,递归读取文件夹匹配内容

阅读更多

VScode搜索功能图示:

 

 

关键点:读取目录文件夹,判断是否文件夹,若是递归继续读取,否则通过正则或普通匹配关键词。

               统计唯一文件名数量,统计总搜索记录数量累加,展示结果。

 

Core code:

const fs = require('fs');
const path = require('path');

// const basePath = path.resolve('src');
// const matchFile = /\.(jsx?|css)$/;
const basePath = path.normalize('D:\\Dev\\xxx\\src\\main\\webapp');
const matchFile = /\.(jsp?|css)$/;
const searchWord = /\/assetWithdraw\/.*?\.html/img;
const matchList = {};
let fileCount = 0;

const isDirectory = source => fs.lstatSync(source).isDirectory();
const getDirectories = source =>
  fs.readdirSync(source).map(fileName => {
    const newPath = path.join(source, fileName);
    if (isDirectory(newPath)) {
      getDirectories(newPath);
    } else {
      if (matchFile.test(fileName)) {
        const contents = fs.readFileSync(newPath, 'utf8');
        let matchs = contents.match(searchWord);
        if (matchs) {
          fileCount += 1;
          matchs.map(v => {
            matchList[newPath] = (matchList[newPath] || 0) + 1;
          });
        }
      }
    }
  });

getDirectories(basePath);

const sortList = Object.keys(matchList);
console.log(`Stat: ${Object.values(matchList).reduce((a,b) => a+b, 0)} results in ${fileCount} files (Unique of ${sortList.length})\n`);
console.log(sortList.map((v, i) => `${i+1}, ${v} (${matchList[v]})`).join('\n'));

 

搜索结果print:

Stat: 179 results in 65 files (Unique of 65)

1, D:xxx.js (1)
2, D:xxx.js (6)
3, D:xxx.js (1)
4, D:xxx.js (3)
5, D:xxx.js (4)
6, D:xxx.js (1)
7, D:xxx.js (2)
8, D:xxx.js (1)
9, D:xxx.js (1)
10, D:xxx.js (2)
11, D:xxx.js (2)
12, D:xxx.js (2)
13, D:xxx.js (5)
14, D:xxx.js (1)
15, D:xxx.js (2)
16, D:xxx.js (1)
17, D:xxx.js (4)
18, D:xxx.js (2)
19, D:xxx.js (1)
20, D:xxx.js (1)
21, D:xxx.js (1)
22, D:xxx.js (1)
23, D:xxx.js (2)
24, D:xxx.js (7)
25, D:xxx.js (1)
26, D:xxx.js (2)
27, D:xxx.js (1)
28, D:xxx.js (4)
29, D:xxx.js (2)
30, D:xxx.js (1)
31, D:xxx.js (1)
32, D:xxx.js (1)
33, D:xxx.js (1)
34, D:xxx.js (2)
35, D:xxx.js (7)
36, D:xxx.js (1)
37, D:xxx.js (2)
38, D:xxx.js (1)
39, D:xxx.js (4)
40, D:xxx.js (2)
41, D:xxx.js (1)
42, D:xxx.js (1)
43, D:xxx.js (1)
44, D:xxx.js (1)
45, D:xxx.js (2)
46, D:xxx.js (6)
47, D:xxx.js (13)
48, D:xxx.js (3)
49, D:xxx.js (3)
50, D:xxx.js (1)
51, D:xxx.js (4)
52, D:xxx.js (1)
53, D:xxx.js (3)
54, D:xxx.js (3)
55, D:xxx.js (13)
56, D:xxx.js (3)
57, D:xxx.js (3)
58, D:xxx.js (13)
59, D:xxx.js (3)
60, D:xxx.js (3)
61, D:xxx.js (3)
62, D:xxx.js (1)
63, D:xxx.js (4)
64, D:xxx.js (1)
65, D:xxx.js (2)

 

  • 大小: 7.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics