usando
ls -1 -f
es aproximadamente 10 veces más rápido y es fácil de hacer (I probado con 1 millón de archivos, pero mi problema original tenía 6 800 000 000 archivos)
Pero en mi caso necesitaba verificar si algún directorio específico contiene más de 10 000 archivos. Si hay más de 10 000 archivos, ya no me interesa cuántos archivos hay. Acabo de salir del programa para que funcione más rápido y no intente leer el resto uno a uno. Si hay menos de 10 000, imprimiré la cantidad exacta. La velocidad de mi programa es bastante similar a ls -1 -f si especifica un valor mayor para el parámetro que la cantidad de archivos.
Puede usar mi find_if_more.pl programa en el directorio actual escribiendo:
find_if_more.pl 999999999
Si está interesado solamente si hay más de n archivos, escritura terminará más rápido que ls -1 -f con muy gran cantidad de archivos
#!/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;
Esto sería encontrar archivos en el directorio actual, y también en cualquier subdirectorio. – mwfearnley