Perl 在文件夹和子文件夹中搜索特定的文件扩展名

Perl search for a particular file extension in folder and sub folder

我有一个文件夹,其中有超过 1500 个文件分散在不同的子文件夹中,扩展名为 .fna。我想知道 Perl 中是否有一种简单的方法可以提取所有这些文件并将它们存储在不同的位置?

您正在使用哪个OS?如果是Windows,我想一个简单的xcopy命令会容易很多。打开控制台 window 并键入 "xcopy /?" 以获取有关此命令的信息。它应该像这样简单:

xcopy 目录 1/*.fna 目录 2 /s

没有更多信息可以继续,您不需要 perl 脚本来完成如此简单的事情。

这是 *nix 单行本

find /source/dir -name "*.fna" -exec mv -t /target/dir '{}' \+ -print
use File::Find;

my @files;
find(\&search, '/some/path/*.fna');
doSomethingWith(@files);
exit;

sub search {
  push @files, $File::Find::name;
  return;
}

由于到处都推荐使用 File::Find,让我补充一点,还有其他有时更好的选项,例如 https://metacpan.org/pod/Path::Iterator::Rule 或 Path::Class 遍历函数。

抱歉回复晚了。我去参加一个会议。这是我的代码,到目前为止似乎运行良好。

use strict;
use warnings;
use Cwd;
use FileHandle;
open my $out, ">>results7.txt" or die;
my $parent = "/home/denis/Denis_data/Ordered species";
my ($par_dir, $sub_dir); 
opendir($par_dir, $parent); 
while (my $sub_folders = readdir($par_dir)) {
next if ($sub_folders =~ /^..?$/);  # skip . and ..
my $path = $parent . '/' . $sub_folders;
#my $path = $sub_folders;
next unless (-d $path);   # skip anything that isn't a directory
chdir($path) or die;
system 'perl batch_hmm.pl';
print $out $path."\n";
#chdir('..') or die;
#closedir($sub_dir);
}
closedir($par_dir);

我也会尝试 File::Finder 选项。上面的看起来很乱