ファイルリスト取得のコード例と速度(winの場合)
back
■1. ファイルグロブを使用
hmiyazaki@mozzarella:~/work/tsol/dev/statistics4$ time zsh -c "repeat 100 ./listup_ctrl.pl"
real 0m22.703s
user 0m8.790s
sys 0m11.970s
■2. `find -type f`を使用
hmiyazaki@mozzarella:~/work/tsol/dev/statistics4$ time zsh -c "repeat 100 ./listup_ctrl.pl"
real 0m40.744s
user 0m13.910s
sys 0m27.040s
hmiyazaki@mozzarella:~/work/tsol/dev/statistics4$
■3. `find -name "*-Control"`を使用
hmiyazaki@mozzarella:~/work/tsol/dev/statistics4$ time zsh -c "repeat 100 ./listup_ctrl.pl"
real 0m36.128s
user 0m14.690s
sys 0m21.130s
■4. `opendir で力技`
hmiyazaki@mozzarella:~/work/tsol/dev/statistics4$ time zsh -c "repeat 100 ./listup_ctrl.pl"
real 0m25.324s
user 0m9.840s
sys 0m15.710s
ただし、Solari で実行した場合は、リストアップ対象ファイルが多いほど、
find を使うほうが高速
------------------
コード
------------------
my $basedir = ".";
my $dir = $basedir . "/queue/defferred/SMTP-Deliver";
@list = &get_filelist($dir, '\-Control$');
sub get_filelist {
my $basedir = shift;
my $file_fmt = shift;
my @filed;
my @tmp;
my $f;
opendir(D, $basedir);
@tmp = readdir(D);
close(D);
foreach $f (@tmp) {
next if ($f =~ /^\.+$/);
if (-d $basedir."/".$f) {
push @filed, &get_filelist($basedir."/".$f, $file_fmt);
}
else {
push @filed, $basedir."/".$f if ($f =~ /$file_fmt/);
}
}
return @filed;
}
back