如何测试 Perl 中是否存在与模式匹配的文件名?

发布于 2024-09-28 01:05:45 字数 176 浏览 11 评论 0原文

我可以用 Perl 做这样的事情吗?含义是对文件名进行模式匹配并检查它是否存在。

    if(-e "*.file")
    {
      #Do something
    }

我知道要求系统列出存在的文件的较长解决方案;将其作为文件读取,然后推断文件是否存在。

Can I do something like this in Perl? Meaning pattern match on a file name and check whether it exists.

    if(-e "*.file")
    {
      #Do something
    }

I know the longer solution of asking system to list the files present; read it as a file and then infer whether file exists or not.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

硬不硬你别怂 2024-10-05 01:05:46

您可以使用 glob 返回与该模式匹配的所有文件的数组:

@files = glob("*.file");

foreach (@files) {
    # do something
}

如果您只是想要知道是否存在与模式匹配的文件,可以跳过赋值:

if (glob("*.file")) {
    # At least one file matches "*.file"
}

You can use glob to return an array of all files matching the pattern:

@files = glob("*.file");

foreach (@files) {
    # do something
}

If you simply want to know whether a file matching the pattern exists, you can skip the assignment:

if (glob("*.file")) {
    # At least one file matches "*.file"
}
成熟的代价 2024-10-05 01:05:46

在 Windows 上,我必须使用 文件::全局:: Windows 作为分隔反斜杠的 Windows 路径似乎不适用于 perl 的 glob。

On Windows I had to use File::Glob::Windows as the Windows path separating backslashes don't seem to work perl's glob.

百合的盛世恋 2024-10-05 01:05:46

在 *nix 系统上,我使用了以下方法并取得了良好的效果。

sub filesExist { return scalar ( my @x = `ls -1a 2> /dev/null "$_[0]"` ) }

它会回复找到的匹配项数量,如果没有则回复 0。使其可以轻松地在“if”条件中使用,例如:

if( !filesExist( "/foo/var/not*there.log" ) &&
    !filesExist( "/foo/var/*/*.log" ) &&
    !filesExist( "/foo/?ar/notthereeither.log" ) )
{
    print "No matches!\n";
} else {
    print "Matches found!\n";
}

您可以使用的确切模式将取决于您的 shell 支持的模式。但大多数 shell 支持使用“*”和“?” - 我见过的所有地方的意思都是一样的。当然,如果您删除了对“标量”函数的调用,它将返回匹配项 - 对于查找这些变量文件名很有用。

On *nix systems, I've used the following with good results.

sub filesExist { return scalar ( my @x = `ls -1a 2> /dev/null "$_[0]"` ) }

It replies with the number of matches found, or 0 if none. Making it easily used in 'if' conditionals like:

if( !filesExist( "/foo/var/not*there.log" ) &&
    !filesExist( "/foo/var/*/*.log" ) &&
    !filesExist( "/foo/?ar/notthereeither.log" ) )
{
    print "No matches!\n";
} else {
    print "Matches found!\n";
}

Exactly what patterns you could use would be determined by what your shell supports. But most shells support the use of '*' and '?' - and they mean the same thing everywhere I've seen. Of course, if you removed the call to the 'scalar' function, it would return the matches - useful for finding those variable file names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文