Perl移动文件

Perl移动文件,perl,Perl,我正在使用此代码从目录中移动文件,但我需要做2个更改,并希望得到一些帮助 我想要“return除非”找到的目录/^\u temp\z/s包含cue&&toc&&accurip&&flac文件。如果缺少其中一个扩展名,请转到下一个目录 如果此条件为真,则将文件从DIR“.”目录移动到$DIR_dump,但要使用复制的父文件夹,并且如果第一个父文件夹包含“Disc\d”,则复制第二个父文件夹并移动$DIR_dump\$parent_folder\$Disc find(\&temp, $dir

我正在使用此代码从目录中移动文件,但我需要做2个更改,并希望得到一些帮助

我想要“return除非”找到的目录/^\u temp\z/s包含cue&&toc&&accurip&&flac文件。如果缺少其中一个扩展名,请转到下一个目录

如果此条件为真,则将文件从DIR“.”目录移动到$DIR_dump,但要使用复制的父文件夹,并且如果第一个父文件夹包含“Disc\d”,则复制第二个父文件夹并移动$DIR_dump\$parent_folder\$Disc

find(\&temp, $dir_target); 
sub temp {
my $dir_dump = "E:/_dump/";
my ($dev,$ino,$mode,$nlink,$uid,$gid);
return unless ((($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -d _ && /^\_temp\z/s);
    chdir($File::Find::dir) or die "could not cd to $File::Find::dir: $!";
    # mv files from cur dir to $dir_dump
    opendir DIR, '.' or die "could not open dir: $!";
    my @files = grep m{\.(?:accurip|cue|flac|log|toc|wv)\z}, readdir DIR;
    closedir DIR;
foreach my $file (@files) {
    mv $file, $dir_dump or die "could not mv $file to $dir_dump: $!";
}
# mv files from temp to cur dir
    opendir DIR, '_temp' or die "could not open temp dir: $!";
@files = grep m{\.(?:accurip|cue|flac|toc)\z}, readdir DIR;
    closedir DIR;
foreach my $file (@files) {
    mv "_temp/$file", '.' or die "could not mv $file from _temp: $!";
}
finddepth(sub{rmdir},'.');
}

要检查目录是否包含具有所有4个扩展名的文件,可以执行以下操作:

my @dir_files = readdir DIR; # after you did opendir
my %extensions = map { (/\.([^.]+)$/)=> 1 } @dir_files;
foreach my $required_ext (qw(accurip cue flac toc)) {
    return unless $extensions{$required_ext};
}

我必须承认我不太明白你的第二个要求,对不起。也许你可以提供一些例子?

@thebourneid-不客气。如果有帮助,可以点击答案旁边的向上箭头进行投票:)