Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 测试给定文件名是否位于目录下的简单方法?_Perl_Filenames_Filepath_Subdirectory - Fatal编程技术网

Perl 测试给定文件名是否位于目录下的简单方法?

Perl 测试给定文件名是否位于目录下的简单方法?,perl,filenames,filepath,subdirectory,Perl,Filenames,Filepath,Subdirectory,是否有一个Perl模块(最好是core)具有一个函数,可以告诉我给定的文件名是否在目录(或者递归地在目录的子目录)中 例如: my $f = "/foo/bar/baz"; # prints 1 print is_inside_of($f, "/foo"); # prints 0 print is_inside_of($f, "/foo/asdf"); 我可以自己写,但有一些复杂因素,如符号链接、相对路径、检查文件系统是否合适等。我不想重新发明轮子。如果您希望函数只适用于文件名(没有路径)

是否有一个Perl模块(最好是core)具有一个函数,可以告诉我给定的文件名是否在目录(或者递归地在目录的子目录)中

例如:

my $f = "/foo/bar/baz";

# prints 1
print is_inside_of($f, "/foo");

# prints 0
print is_inside_of($f, "/foo/asdf");

我可以自己写,但有一些复杂因素,如符号链接、相对路径、检查文件系统是否合适等。我不想重新发明轮子。

如果您希望函数只适用于文件名(没有路径)和路径,您可以使用:


如果您不想检查文件系统,而只想处理路径,请参阅以获取一些可以帮助您的函数。但是,如果要处理符号链接,则无法避免接触文件系统。

如果希望该函数仅适用于文件名(无路径)和路径,则可以使用:

如果您不想检查文件系统,而只想处理路径,请参阅以获取一些可以帮助您的函数。但是,如果您想处理符号链接,就不能不接触文件系统。

不在核心中,但它没有非核心依赖项,因此安装非常快速方便

use Path::Tiny qw(path);

path("/usr/bin")->subsumes("/usr/bin/perl");   # true
现在,它完全是通过查看文件路径(在规范化它们之后)来实现这一点的,因此它可能是足够的,也可能不是足够的,这取决于您在符号链接等边缘情况下所期望的行为类型。但在大多数情况下,这应该足够了。(如果您想考虑硬链接,唯一的方法是搜索整个目录结构并比较inode编号。)

不在core中,但它没有非core依赖项,因此安装非常快速方便

use Path::Tiny qw(path);

path("/usr/bin")->subsumes("/usr/bin/perl");   # true

现在,它完全是通过查看文件路径(在规范化它们之后)来实现这一点的,因此它可能是足够的,也可能不是足够的,这取决于您在符号链接等边缘情况下所期望的行为类型。但在大多数情况下,这应该足够了。(如果要考虑硬链接,唯一的方法是搜索整个目录结构并比较inode编号。)

这里有两种不同的技术:如果要考虑符号链接,则必须递归搜索目录结构以查看文件是否存在。如果您愿意忽略符号链接,则可以仅根据路径字符串做出决定?这里有两种不同的技术:如果您想考虑符号链接,则必须对目录结构进行递归搜索,以查看文件是否存在。如果您愿意忽略符号链接,则可以根据路径字符串aloneThanks来决定您的答案。不幸的是,如果给定目录下有许多文件,这种方法的成本非常高。谢谢你的回答。不幸的是,如果给定目录下有许多文件,那么这种方法的成本非常高。