【问题标题】:How to ignore hidden files in fs.readdir result如何忽略 fs.readdir 结果中的隐藏文件
【发布时间】:2021-12-15 00:14:47
【问题描述】:

在节点应用程序中,我需要获取目录中除隐藏文件之外的所有文件。 我试过 fs.readdir 但它也显示隐藏文件。

【问题讨论】:

  • Nodejs - Check for hidden files 的可能重复项
  • 您可以(或者我不得不说)遍历文件以过滤掉“隐藏”文件。检查上面的链接。
  • fs.readdir 应该有一个排除隐藏文件的原生选项。

标签: node.js


【解决方案1】:

使用来自this 答案的正则表达式,这个简单的解决方案会从结果中删除所有隐藏文件:

fs.readdir('/path/to/directory', (err, list) => {
  list = list.filter(item => !(/(^|\/)\.[^\/\.]/g).test(item));

  // Your code
});

【讨论】:

    【解决方案2】:

    你可以使用:

    fs.readdir('/path/to/directory', function(err, list) {
      list.forEach(function (filename) {
        if(! /^\..*/.test(filename)) {
          // display files
        }
      });
    });
    

    【讨论】:

      【解决方案3】:

      承诺方式

      const fs = require('fs').promises;
      
      const readdir = path => {
        return fs
          .readdir(path)
          .then(list => list.filter(item => !/(^|\/)\.[^/.]/g.test(item)));
      };
      

      【讨论】:

        【解决方案4】:

        我使用junk 包来忽略隐藏文件。

        var fs = require('fs');
        var junk = require('junk');
        
        fs.readdir('path', function (err, files) {
            console.log(files.filter(junk.not));
        });
        

        【讨论】:

        • 垃圾不会过滤所有隐藏文件。 > Filter out system junk files like .DS_Store and Thumbs.db
        • @1252748 是的。您可以定义正则表达式来隐藏您不需要的内容。
        • 那为什么还要使用垃圾模块呢?只需过滤/^\./。没有理由使用一个不做你想做的事情的模块,就像你可以过滤来自 readdir 的结果一样过滤它的结果。
        • 这些都不起作用,也许它们在使用点 (.) 表示隐藏目录的类 UNIX 系统上取得了一些成功,但在现实世界中,目录不必以一个要隐藏的点,尤其是在 Windows 上。目录是否隐藏存储在其属性中,因此 Node 确实应该在本机上支持这一点,不仅针对隐藏文件夹,还针对系统文件夹。
        • 看起来像垃圾现在确实会过滤掉 .DS_Store 和 Thumbs.db:github.com/sindresorhus/junk/blob/main/index.js
        猜你喜欢
        • 1970-01-01
        • 2021-08-13
        • 2012-11-25
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 2015-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多