Nodejs -检查隐藏文件

kq4fsx7k  于 2023-06-22  发布在  Node.js
关注(0)|答案(3)|浏览(288)

我正在迭代一个文件目录,想知道是否有可能测试一个文件是否被隐藏。目前,我只是检查文件是否以“.”开头。这在Mac(和Linux,也许),但是,我想知道我将如何在Windows上做到这一点?此外,句号是否会在所有Linux版本中隐藏文件?
谢谢!
代码:

var fs = require('fs');
fs.readdir('/path', function(err, list) {
   list.forEach(function(filename){
       var isHidden = /^\./.test(filename);
        // etc ...
    }); 
});
6rvt4ljy

6rvt4ljy1#

在Unix中,有效检测隐藏文件和目录路径的正则表达式可能会更复杂一些,因为它们可能存在于长路径字符串中。
下面的内容试图解决同样的问题。

/**
 * Checks whether a path starts with or contains a hidden file or a folder.
 * @param {string} source - The path of the file that needs to be validated.
 * returns {boolean} - `true` if the source is blacklisted and otherwise `false`.
 */
var isUnixHiddenPath = function (path) {
    return (/(^|\/)\.[^\/\.]/g).test(path);
};
wn9m85ua

wn9m85ua2#

在Windows 7上使用节点0.6.x进行了一些快速测试。安装程序是一个包含1个文件夹、1个受保护文件夹、1个隐藏文件夹和1个没有特殊属性的文件夹。
我循环了这个文件夹并获取了条目的统计数据(使用fs.stat(path,callback)),以下是结果:

testfolder
fs.Stats.mode: 16895

test_hidden.txt
fs.Stats.mode: 33206

test_norm.txt
fs.Stats.mode: 33206

test_prot.txt
fs.Stats.mode: 33060

正如您所看到的,可以通过模式区分受保护和隐藏/普通文件,但隐藏属性实际上是一个真实的属性,与文件模式无关。
为了可靠地识别Windows上的隐藏文件,node.js团队必须在Windows上实现GetFileAttributes()API(就像C++或C#所做的那样)。AFAIK,这不是在管道中(至少我在一些快速谷歌搜索后什么也没找到)。
对于你的问题,当前缀是句点时,文件被隐藏在所有风格的unix中:我没有遇到一个发行版,这不起作用,所以从我的POV:是的。

tsm1rwdh

tsm1rwdh3#

我建议使用另一篇文章中的一条评论中提到的解决方案,而不是一个硬过滤器,并且主要限于以点开头的文件:
https://github.com/sindresorhus/junk
通过这个模块的优点是它是可扩展的:如果有人添加了另一个文件命名方案,您也将从中受益。

代码示例:

import fs from 'node:fs/promises';
import {isNotJunk} from 'junk';

const files = await fs.readdir('some/path');

console.log(files);
//=> ['.DS_Store', 'test.jpg']

console.log(files.filter(isNotJunk));
//=> ['test.jpg']

相关问题