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

时间:2015-02-02 19:13:30

标签: perl extract subdirectory

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

5 个答案:

答案 0 :(得分:2)

由于File :: Find在任何地方都是推荐的,让我补充说还有其他有时更好的选项,比如https://metacpan.org/pod/Path::Iterator::Rule或Path :: Class遍历函数。

答案 1 :(得分:1)

您使用的是哪种操作系统?如果它是Windows,我认为简单的xcopy命令会容易得多。打开控制台窗口并输入“xcopy /?”获取有关此命令的信息。它应该是简单的东西:

xcopy directory1 / * .fna directory2 / s

答案 2 :(得分:1)

如果没有更多信息,您就不需要 perl脚本来执行这样简单的操作。

这里是* nix one-liner

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

答案 3 :(得分:1)

use File::Find;

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

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

答案 4 :(得分:0)

抱歉迟到了。我要去参加一个会议了。这是我的代码,到目前为止似乎工作正常。

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选项。上面的一个看起来很乱。