用于计算windows目录树中文件数的perl脚本
我不熟悉perl脚本。我正在尝试获取目录和子目录的计数。 因此,我搜索了所有关于脚本的可用帮助。 但无法获取子目录的计数。下面是我使用的脚本用于计算windows目录树中文件数的perl脚本,perl,Perl,我不熟悉perl脚本。我正在尝试获取目录和子目录的计数。 因此,我搜索了所有关于脚本的可用帮助。 但无法获取子目录的计数。下面是我使用的脚本 use strict; use warnings; use File::Slurp; my @dirs = ('.'); my $directory_count = 0; my $file_count = 0; my $outfile = 'log.txt'; open my $fh, '>', $
use strict;
use warnings;
use File::Slurp;
my @dirs = ('.');
my $directory_count = 0;
my $file_count = 0;
my $outfile = 'log.txt';
open my $fh, '>', $outfile or die "can't create logfile; $!";
for my $dir (@dirs) {
for my $file (read_dir ($dir)) {
if ( -d "$dir/$file" ) {
$directory_count++;
}
else {
$file_count++;
}
}
print $fh "Directories: $directory_count\n";
print $fh "Files: $file_count\n";
}
close $fh;
在这里,我无法确定在何处使用/s更改dir命令。
请帮助,这将减少大量的体力劳动
Ravi使用起来似乎更简单。。例如:
use warnings;
use strict;
use File::Find::Rule;
my @files = File::Find::Rule->new->file->in('.');
my @dirs = File::Find::Rule->new->directory->in('.');
永远不要编写自己的目录遍历。陷阱、陷阱和边缘案例太多了。例如路径分隔符、带空格的文件、备用数据流、软链接、硬链接、DFS路径。。。不要这样做 使用
File::Find
或者如果您更喜欢File::Find::Rule
由于我更喜欢前者,我将举一个例子:
use strict;
use warnings;
use File::Find;
my $dir_count;
my $file_count;
#find runs this for every file in it's traversal.
#$_ is 'current file'. $File::Find::Name is full path to file.
sub count_stuff {
if ( -d ) { $dir_count++ };
if ( -f ) { $file_count++ };
}
find ( \&count_stuff, "." );
print "Dirs: $dir_count\n";
print "Files: $file_count\n";
下面是一个脚本:1)没有全局变量;2)而不向名称空间添加另一个子对象
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
run(\@ARGV);
sub run {
my $argv = shift;
for my $dir ( @$argv ) {
my $ret = count_files_and_directories( $dir );
printf(
"%s: %d files and %d directories\n",
$dir,
$ret->{files},
$ret->{directories}
);
}
return;
}
sub count_files_and_directories {
my $top = shift;
my %ret = (directories => 0, files => 0);
find(
{
wanted => sub {
-d and $ret{directories} += 1;
-f and $ret{files} += 1;
},
no_chdir => 1,
},
$top,
);
\%ret;
}
用一个包含很多文件的目录试试看。如果OP只需要计数,他就不需要收集数十万个字符串到一个数组中。@SinanÜnür如果用户只需要检查少量文件,这个解决方案就足够有效,并且解决了他的问题。OP没有指定文件和目录的数量,所以我们不知道。当然,您的解决方案是选择大计数。