Perl获取父文件夹名称

Perl获取父文件夹名称,perl,Perl,使用File::Find获取父目录名称的解决方案是什么。我知道如何仅获取文件名或目录路径,但我不知道如何为最后一个包含目录执行此操作 例如,如果目录是/dir\u 1/dir\u 2/dir\u 3/../dir\u n/*.txt,我需要获取“dir\u n”名称 use strict; use warnings; use File::Find; my $dir = "some_path"; find(\&file_handle, $dir); sub file_handle {

使用File::Find获取父目录名称的解决方案是什么。我知道如何仅获取文件名或目录路径,但我不知道如何为最后一个包含目录执行此操作

例如,如果目录是
/dir\u 1/dir\u 2/dir\u 3/../dir\u n/*.txt
,我需要获取“
dir\u n
”名称

use strict;
use warnings;
use File::Find;

my $dir = "some_path";

find(\&file_handle, $dir); 
sub file_handle {
    /\.txt$/ or return;
    my $fd = $File::Find::dir;
    my $fn = $File::Find::name;
    # ...
}

给定目录路径,然后将(另一个核心模块)应用于该路径以获取目录的最后一部分

use strict;
use warnings;
use File::Find;
use File::Basename;

my $dir = "some_path";

find(\&file_handle, $dir); 
sub file_handle {
    /\.txt$/ or return;
    my $fd = $File::Find::dir;
    my $fn = $File::Find::name;
    my $dir = basename($fd);
    # ....
}

您可以拆分并获取数组中倒数第二个元素:

my $fname = "/folder/sub-folder/filename.bin";
my @parts = split('/', $fname);
if( @parts > 1 ) {
   return $parts[@parts - 2];
} else {
   return '/';
}

如果您愿意安装非核心模块,可以使用:

use Path::Class;

dir("some_dir")->recurse(callback => sub {
    my $file = shift;
    return if $file->is_dir;
    return if $file =~ /\.txt$/i;

    my $fn  = $file->basename;
    my $fd  = $file->parent;
    my $dir = $file->parent->parent;
});
它为您提供了方便的对象,而不是字符串,并且可以对它们进行很好的操作

#!/usr/local/bin/perl -w

use strict;
use File::Basename;
use Cwd 'abs_path';

my $f = "../some/path/to/this_directory/and_filename";  
my $d = basename(dirname(abs_path($f)));
say $d;

返回“this_directory”

这些被称为目录,而不是文件夹-对我来说,这听起来像是婴儿谈话:)谢谢你的建议。我更正了帖子。