在perl中打印没有完整路径的cwd?

时间:2013-10-28 23:15:36

标签: perl cwd

我有一堆数据存储在以date标记的子目录中。我已经使用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 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

只需split,然后pop

从perlmonks无耻地偷走了:

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

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

答案 2 :(得分:0)

您可以将perl模块File :: Basename与Cwd组合在一起以获取不带路径的目录

perl -MCwd -MFile::Basename -e 'my $dir = cwd; print basename($dir)'

答案 3 :(得分:0)

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

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

这是我认为最好的方法。上面的代码只是一个例子,但正则表达式将完成你想要的工作。