【发布时间】:2021-05-02 18:58:49
【问题描述】:
我有两条路。我想检查其中一个是否存在于文件系统中的另一个之下。我会做类似的事情:
if (index($path,$subpath) != -1 && $path ne $subpath) {
print("$subpath is subpath of $path\n");
}
但是将路径视为字符串会导致一些问题。例如,如果$path 或$subpath 是链接,它将不起作用。
检查$subpath 是否存在于$path 下的可靠方法是什么?如果它是一个链接,它应该检查链接(源文件而不是目标)本身是否存在于该路径下。
例如:
Path (realpath to dir): /a/b/c
Subpath (realpath to dir): /a/b/c/d
在这种情况下,第二个在第一个的文件系统下。另一个例子:
Path (realpath to dir): /a/b/c
Subpath: /p/x/y/z
例如,/p/x/y/z 是指向/a/b/c/d/e/f 的链接。在这种情况下,它不在第一个路径的文件系统下,因为该链接位于/p/x/y/z 而不是/a/b/c/... 下。希望有意义。
【问题讨论】:
-
您能否提供一些示例路径和子路径(存在和不存在的)?
-
@Shawn 添加一些例子。希望现在更有意义。
-
足够给出答案了,是的(我不确定你的子路径是像
/a/b/c/d这样的绝对路径还是像d这样的相对路径)。 -
您可以执行
use Cwd; $path = Cwd::realpath( $path ); $subpath = Cwd::realpath( $subpath ); return( length( $subpath ) > length( $path ) && index( $subpath, $path ) == 0 );,它会告诉您$subpath包含在$path中。
标签: perl