Как узнать, находится ли файл в каталоге с Node.js? - PullRequest
5 голосов
/ 04 мая 2011

Учитывая два абсолютных или относительных пути, A и B, я хочу выяснить, находится ли B «внутри» каталога A - не только в самом каталоге, но потенциально в подкаталоге , Я хотел бы сделать это без потенциально огромного количества fs.readdir звонков.

Например, если A равно / и B равно /foo/bar/baz, должно быть совершенно очевидно, что B находится в пределах A; рекурсивный readdir подход был бы крайне неэффективным.

Одна очевидная идея - преобразовать оба пути в абсолютную форму, а затем проверить, начинается ли строковая форма абсолютного пути B с строковой формы A. Однако есть две проблемы:

  1. Как преобразовать относительные пути в абсолютные?
  2. А как насчет символических ссылок и тому подобного?

Я приму ответы, которые делают вызовы утилитам Linux (кроме rm -rf ... которые технически могут быть использованы для решения проблемы) или сторонним библиотекам Node.

Ответы [ 2 ]

8 голосов
/ 04 мая 2011
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.realpathSync и fs.statSync сгенерируют, если путь не существует.

0 голосов
/ 27 мая 2018

Я предлагаю это:

function isWithin(outer, inner) {
  const rel = path.relative(outer, inner);
  return !rel.startsWith("../") && rel !== '..';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...