Использование
ls -1 -f
примерно в 10 раз быстрее, и это легко сделать (я протестировал с 1 миллионом файлов, но у моей первоначальной проблемы было 6 800 000 000 файлов)
Но в моем случае мне нужно было проверить, содержит ли какой-то конкретный каталог более 10 000 файлов. Если было более 10 000 файлов, мне уже не интересно, сколько там файлов. Я просто вышел из программы, чтобы она работала быстрее и не пытался читать остальное по одному. Если их меньше 10 000, я распечатаю точную сумму. Скорость моей программы очень похожа на ls -1 -f, если вы указываете большее значение параметра, чем количество файлов.
Вы можете использовать мою программу find_if_more.pl в текущем каталоге, набрав:
find_if_more.pl 999999999
Если вам просто интересно, если существует более n файлов, сценарий завершится быстрее, чем ls -1 -f с очень большим количеством файлов.
#!/usr/bin/perl
use warnings;
my ($maxcount) = @ARGV;
my $dir = '.';
$filecount = 0;
if (not defined $maxcount) {
die "Need maxcount\n";
}
opendir(DIR, $dir) or die $!;
while (my $file = readdir(DIR)) {
$filecount = $filecount + 1;
last if $filecount> $maxcount
}
print $filecount;
closedir(DIR);
exit 0;