如何确定文件是否在Node.js的目录中?

Tre*_*ham 5 javascript file-io node.js

给定两个绝对路径或相对路径,A并且B,我想知道是否B"在目录内" A- 不仅仅是在目录本身中,而是可能在子目录中.我想这样做,没有潜在的大量fs.readdir电话.

举例来说,如果A/B/foo/bar/baz,它应该是很明显,B就是内A; 递归readdir方法效率极低.

一个明显的想法是将两个路径转换为绝对形式,然后检查B绝对路径的字符串形式是否以字符串形式开头A.但是,有两个问题:

  1. 如何将相对路径转换为绝对路径?
  2. 符号链接等等呢?

我会接受调用Linux实用程序的答案(除了rm -rf...... 技术上可用于解决问题)或第三方节点库.

mak*_*mak 8

var fs = require('fs');

var a = fs.realpathSync('/home/mak/www'); // /var/www
var b = fs.realpathSync('/var/www/test/index.html');

var b_in_a = b.indexOf(a) == 0;

var a_is_dir = fs.statSync(a).isDirectory();
Run Code Online (Sandbox Code Playgroud)

fs.*Sync也有异步版本,请参阅fs模块.

fs.realpathSync并且fs.statSync,如果路径不存在将抛出.

  • 对于与文件夹具有相同前缀的文件,这可能会给出错误的答案。如果 a = `/var/www` 且 b = `/var/wwwtwo/index.html`,则返回 true。 (2认同)