2011-05-04 39 views
4

给定两条绝对路径或相对路径AB,我想知道B是否位于目录A的“内部” - 不仅在目录本身中,而且可能位于子目录中。我想这样做没有潜在的巨大数量的fs.readdir电话。如何查找文件是否位于具有Node.js的目录中?

举例来说,如果A/B/foo/bar/baz,它应该是很明显,B距离A;递归的方法将是非常低效的。

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

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

我会接受的答案,使以Linux工具(比rm -rf其他......这技术上可以用来解决问题),或者第三方节点库调用。

回答

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

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

fs.realpathSyncfs.statSync如果路径不存在将抛出。

+0

啊!我知道必须有一些我忽略的Node API的一部分。谢谢! – 2011-05-05 03:27:24

+1

仅仅提到检查indexOf是不够的。在这种情况下它会失败:'a/b/c','a/b/cx/y.js'。你需要检查一个目录分隔符是否在相同的长度后出现b.chartAt(a.length)== directorySeparator' – inf3rno 2016-09-03 11:05:19

相关问题