我正在尝试在一个给定目录下的每个子目录中生成单独的文件列表。这可能是一个已经解决和解决的问题,但我的具体问题是我的子目录将始终具有名称模式,并且还具有确切的数字文件,例如 -
<**Main_Dir**>
<sub-directory>- sub1_dir with files
sub1.name.txt
sub1.place.txt
sub3.time.txt
sub4.date.txt
<sub-directory>- sub2_dir with files
sub2.name.txt
sub2.place.txt
..............
<sub-directory>- sub3_dir with files
sub3.name.txt
...............
.......
有没有办法让代码循环遍历每个sub *子文件夹,因为我知道这些主文件夹的模式/名称将保持这样? 简而言之,脚本应该在每个子目录下创建一个文件,其中包含文件列表。
例如 -
<sub-directory>- sub1_dir with files
List_sub1_dir.txt
sub1.name.txt
..............
<sub-directory>- sub2_dir with files
List_sub2_dir.txt
...............
我编辑的代码 - 它不会在子文件夹中创建任何列表文件有人可以帮我找到错误吗?非常感谢!!
use strict;
use warnings;
use File::Find::Rule;
my $directory = './Maindir';
my @subdirs = File::Find::Rule->directory->in( $directory );
foreach my $dir (@subdirs) {
#print "$dir\n";
next if ($dir eq "..");
if (-d $dir)
{
my @files = File::Find::Rule->file() ->name( '*.*' ) ->in( $di
+r);
foreach my $file (@files)
{
open (FH,"$file");
while (<FH>)
{
open FILE,">>./$dir.txt" or die $!;
print FILE "$_";
}
close(FH);
close FILE;
#print "$file\n";
}
}
答案 0 :(得分:1)
我想你想要
my @files = glob './Main_dir/*/*.txt'
答案 1 :(得分:0)
正如其他人所说,File::Find是这类任务的有用模块。就个人而言,我更喜欢使用File::Find::Rule。基本上File :: Find:Rule提供了File :: Find模块的备用接口。
这是一个使用File :: Find :: Rule查找目录(及其子目录)中所有文件(带完整路径)的示例:
$a = 0;
for($i = $a; ; ){
for($j = $a; ; ){
$lim = $this->db->limit(100, $j);
$query = $this->db->get();
$list = $query->result();
return $list;
if($j >= 0) {
break;
}
}
$a = $a + 100;
}
更新:
以上代码有拼写错误。 use strict;
use warnings;
use feature 'say';
use File::Find::Rule;
my $dir = '/mydir';
my $rule = File::Find::Rule->new();
$rule->$file;
my @files = $rule->in($dir);
foreach my $file (@files) {say $file;}
行应为$rule->$file;
。