如何查找文件是否在Node.js的目录中?

给定两个绝对path或相对pathAB ,我想知道B是否在目录A “内部” – 不仅仅在目录本身中,而且可能在子目录中。 我想这样做没有可能庞大的fs.readdir调用数量。

例如,如果A/B/foo/bar/bazB应该在A之内是非常明显A 。 recursionreaddir方法将是非常低效的。

一个明显的想法是将两个path转换为绝对path,然后检查B的绝对path的stringforms是否以A的stringforms开始。 但是,有两个问题:

  1. 你如何将相对path转换为绝对path?
  2. 什么是符号链接等?

我将接受调用Linux实用程序(除了rm -rf技术上可以用来解决问题)或第三方Node库的答案。

 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(); 

fs.*Sync也有asynchronous版本,请参阅fs模块 。

如果path不存在, fs.realpathSyncfs.statSync将会抛出。