使用模式匹配从目录获取最新文件:Perl

使用模式匹配从目录获取最新文件:Perl,perl,glob,Perl,Glob,我是perl的新手,正在编写一个脚本来查找具有最新修改时间戳的模式匹配文件,并将其复制到另一个位置 我的代码在Mac上运行,但在windows server上有问题 use strict; use warnings; use File::stat; my $UNC ="/Users/documents/"; my $FileNamePrefix = "abc*.csv"; my @files = sort {stat($a)->mtime <=> stat($b)->

我是perl的新手,正在编写一个脚本来查找具有最新修改时间戳的模式匹配文件,并将其复制到另一个位置

我的代码在Mac上运行,但在windows server上有问题

use strict;
use warnings;

use File::stat;

my $UNC ="/Users/documents/";
my $FileNamePrefix = "abc*.csv";
my @files = sort {stat($a)->mtime <=> stat($b)->mtime} glob($UNC.$FileNamePrefix);

my $Recon = $files[-1];
print "Latest   = $Recon\n";
使用严格;
使用警告;
使用File::stat;
my$UNC=“/Users/documents/”;
my$FileNamePrefix=“abc*.csv”;
my@files=sort{stat($a)->mtime stat($b)->mtime}glob($UNC.$FileNamePrefix);
my$Recon=$files[-1];
打印“最新=$Recon\n”;
有人能帮我翻译一下这个代码吗,谢谢

源位置: abc_20181.csv(昨天日期) abc_20182.csv(今天)

目标位置:
abc_20182.csv

您可以使用File::Spec创建路径,它将根据运行它的操作系统创建正确的语法。例如:

use strict;
use warnings;

use File::stat;

my $UNC ="/Users/documents/";
my $FileNamePrefix = "abc*.csv";
# platform specific path:
my $pattern = File::Spec->catpath('', $UNC, $FileNamePrefix);
my @files = sort {stat($a)->mtime <=> stat($b)->mtime} glob($pattern);

my $Recon = $files[-1];
print "Latest   = $Recon\n";
使用严格;
使用警告;
使用File::stat;
my$UNC=“/Users/documents/”;
my$FileNamePrefix=“abc*.csv”;
#平台特定路径:
my$pattern=File::Spec->catpath(“”,$UNC,$filenamepriff);
my@files=sort{stat($a)->mtime stat($b)->mtime}glob($pattern);
my$Recon=$files[-1];
打印“最新=$Recon\n”;
这将使Mac上的模式为“/Users/documents/abc*.csv”,Windows上的模式为“\Users\documents\abc*.csv”


有关更多示例,请参阅“perldoc File::Spec”。

是否正确处理文件路径?Linux:
/foo/bar/baz
,vs Windows
c:\foo\bar\baz
是的,路径没有问题,但是排序步骤没有按预期工作我没有访问Windows计算机的权限,但是当您打印出文件的mtime值时会发生什么,它与文件系统所说的一致吗?它是一个数值吗?您的代码已经有了一个
print
语句,并且已经调用了
stat(…)->mtime
。如果您编写了这两行代码,您应该能够为glob($UNC.$FileNamePrefix)编写
print stat($\ux)->mtime“\n”但首先我建议这样做:
为glob($UNC.$FileNamePrefix)打印“$\n”
为了确保您从
glob
@Kjetil实际获得结果:请不要建议优化甚至不起作用的代码的方法。它可能已经足够快了。谢谢大家的建议。当我使用
use File::DosGlob'glob'时,它工作了全局函数按预期工作。有人能告诉我File:DosGlob和File:glob之间的区别吗?Jeff,我在windows上使用不同的路径。windows path=“\\Users\documents\abc*.csv”,David,谢谢你的建议当我检查glob函数时,我发现缺少一个库。