現在,我使用類似如何使用Perl複製特定類型的所有文件?
copy catfile($PATH1, "instructions.txt"), catfile($ENV{'DIRWORK'});
單獨爲每個我想複製的.txt
文件。該代碼是可移植的,因爲它不使用任何操作系統特定的命令。
我如何複製所有文本文件從$PATH1
到DIRWORK
,當我不知道所有文件的個人的名字,同時保持代碼的可移植性?
現在,我使用類似如何使用Perl複製特定類型的所有文件?
copy catfile($PATH1, "instructions.txt"), catfile($ENV{'DIRWORK'});
單獨爲每個我想複製的.txt
文件。該代碼是可移植的,因爲它不使用任何操作系統特定的命令。
我如何複製所有文本文件從$PATH1
到DIRWORK
,當我不知道所有文件的個人的名字,同時保持代碼的可移植性?
您可以使用核心File::Copy
模塊是這樣的:
use File::Copy;
my @files = glob("$PATH1/*.txt");
for my $file (@files) {
copy($file, $ENV{DIRWORK}) or die "Copy failed: $!";
}
'<$ PATH1/*。txt>'也是一個glob;) – mfontani 2010-10-28 16:12:15
如果要保證在Unix系統上工作(例如,不關心的可移植性),我會違揹我自己平常的傾向和公認的最佳實踐,並推薦使用「CP」考慮:)
system("cp $PATH1/*.txt $ENV{'DIRWORK'}");
# Add error checking and STDERR redirection!
對於Perl的原生解決方案,結合匹配替換的文件列表(或者文件::查找)與File::Spec能力找到實際的文件名
my @files = glob("$PATH1/*.txt");
foreach my $file (@files) {
my ($volume,$directories,$filename) = File::Spec->splitpath($file);
copy($file, File::Spec->catfile($ENV{'DIRWORK'}, $filename) || die "$!";
}
因爲你提到的可移植性而不能使用'cp'。 – Lazer 2010-10-28 16:07:05
使用核心File::Find和File::Copy並假設你希望所有.txt
文件$PATH1
複製到$ENV{DIRWORK}
,並也假設你希望它遞歸...
use strict;
use warnings;
use File::Find;
use File::Copy;
die "ENV variable DIRWORK isn't set\n"
unless defined $ENV{DIRWORK} and length $ENV{DIRWORK};
die "DIRWORK $ENV{DIRWORK} is not a directory\n"
unless -d $ENV{DIRWORK};
my $PATH1 = q{/path/to/wherever};
die "PATH1 is not a directory" unless -d $PATH1;
find(sub{
# $_ is just the filename, "test.txt"
# $File::Find::name is the full "/path/to/the/file/test.txt".
return if $_ !~ /\.txt$/i;
my $dest = "$ENV{DIRWORK}/$_";
copy($File::Find::name, $dest) or do {
warn "Could not copy $File::Find::name, skipping\n";
return;
}
}, $PATH1);
搏一搏;)
或者,您爲什麼不使用bash
?
$ (find $PATH1 -type f -name '*.txt' | xargs -I{} cp {} $DIRWORK);
文件::查找和文件複製::是便攜式:
use File::Find;
use File::Copy;
find(
sub {
return unless (-f $_);
$_ =~ /\.txt$/ && copy($File::Find::name, $ENV{'DIRWORK'});
},
$PATH1
);
不應該有一個 「使用文件::複製;」在代碼的開頭? – 2014-01-09 08:53:37