[英]How do I find out whether a file is within a directory with Node.js?
给定两个绝对或相对路径A
和B
,我想知道B
是否在目录A
的“内部”——不仅在目录本身中,还可能在子目录中。 我想在没有大量fs.readdir
调用的情况下执行此操作。
例如,如果A
是/
并且B
是/foo/bar/baz
,那么B
在A
内应该很明显; 递归readdir
方法效率极低。
一个明显的想法是将两个路径都转换为绝对形式,然后检查B
的绝对路径的字符串形式是否以A
的字符串形式开头。 但是,有两个问题:
我将接受调用 Linux 实用程序(除了rm -rf
...在技术上可用于解决问题)或第三方节点库的答案。
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 模块。
如果路径不存在, fs.realpathSync
和fs.statSync
将抛出。
我建议这样做:
const path = require('path')
function isWithin(outer, inner) {
const rel = path.relative(outer, inner);
return !rel.startsWith('../') && rel !== '..';
}
它使用path.relative
来计算inner
相对于outer
的路径。 如果不包含它,则生成路径的第一个组件将是..
,这就是我们要检查的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.