0

我有一堆数据存储在按日期标记的子目录中。我已使用 Cwd 命令获取当前工作目录,以便我可以将其打印到我正在使用从子目录中恢复的数据写入的 vi 文件。我使用 Cwd 作为数据字符串的前缀。有没有办法只打印当前目录名而不是路径?

例子:

而不是打印-

 /d2/aschwa/archive_data/METAR_data/20120302KDUX 121255Z.........

有没有办法只打印-

 20120302KDUX 121255Z.........

这是我正在使用的代码 -

use strict;
use warnings;
use file::find;
use Cwd;

my @folder = ("/d2/aschwa/archive_project/METAR_data/");

open( OUT , '>', 'KDUX_METARS.txt') or die "Could not open $!";

print OUT "Station, Day/Time, Obs Type, Wind/Gust, Vis, Sky, T/Td, Alt, Rmk\n";
print STDOUT "Finding METAR files\n";

my $criteria = sub {if(-e && /^2012/) {
                    open(my $file,$_) or die "Could not open $_ $!\n";
                      my $dir = getcwd;
                        while(<$file>) {
                          print OUT $dir,$_ if /KDUX ....55Z|KDUX ....05Z/;
                            }
                         }
                      };
find($criteria, @folder);
close OUT;
4

4 回答 4

5

在 Perl 中,您可以使用函数basenamefileparse从路径中提取文件名。

它们包含在核心模块File::Basename中。

于 2013-10-28T23:22:47.677 回答
0

简单地splitpop

无耻地从 perlmonks 窃取:

$ perl -e 'print pop @{[split m|/|, "/home/bin/scripts/test.pl"]};'
test.pl

参考链接:http ://www.perlmonks.org/?node_id=241089

于 2013-10-28T23:21:30.100 回答
0

您可以将 perl 模块 File::Basename 与 Cwd 组合以获取没有路径的目录

perl -MCwd -MFile::Basename -e 'my $dir = cwd; print basename($dir)'
于 2013-10-28T23:27:58.987 回答
0

为什么不使用如下正则表达式在最后一个斜杠之后获取内容:

 $path = '/d2/aschwa/archive_data/METAR_data/20120302KDUX 121255Z.........';
 $path = $1 if $path =~ m~/([^/]*)/?$~;

在我看来,这是最好的方法。上面的代码只是一个例子,但是那里的正则表达式会做你想要的工作。

于 2013-10-29T09:04:03.757 回答