Perl获取父文件夹名称
使用File::Find获取父目录名称的解决方案是什么。我知道如何仅获取文件名或目录路径,但我不知道如何为最后一个包含目录执行此操作 例如,如果目录是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 {
/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”这些被称为目录,而不是文件夹-对我来说,这听起来像是婴儿谈话:)谢谢你的建议。我更正了帖子。