Вернуться назад

Подсчет количества файлов в каталоге

Подсчитать количество файлов в текущей папке
Используя команду «ls» :
Если Вам необходимо подсчитать довольно большое количество файлов, данный метод является самым быстрым.

$ ls -f . | wc -l

Эта команда активирует опцию -a, таким образом . , .. и другие файлы начинающиеся с . , также будут подсчитаны.

Используя команду «find» :

$ find . -type f -maxdepth 1 | wc -l

Следующая команда рекурсивно считает количество файлов в текущей директории и всех ее поддиректориях :

$ find . -type f | wc -l

Рекурсивно подсчитать количество папок
Следующая команда рекурсивно считает количество папок в текущей директории и всех ее поддиректориях :
$ find . -type d | wc -l

Подсчитать количество файлов «определенного типа»
Следующая команда рекурсивно считает количество файлов с расширением «.txt» в текущей директории и всех ее поддиректориях :
$ find . -type f -name "*.txt" | wc -l

 

Скрипт на perl для подсчета количества файлов (каталог указать)

#! /usr/bin/perl -w
# Written by Kjetil Torgrim Homme <kjetil.homme@redpill-linpro.com>

use strict;
use File::Find;

my %counted;
my %total;

sub count {
    ++$counted{$File::Find::dir};
}

sub exeunt {
    my $dir = $File::Find::dir;

    # Don't report leaf directories with no files
    return unless $counted{$dir}; 

    my $parent = $dir;
    $parent =~ s!/[^/]*$!!;

    $total{$dir} += $counted{$dir};
    $total{$parent} += $total{$dir} if $parent ne $dir;
    printf("%8d %8d %s\n", $total{$dir}, $counted{$dir}, $dir);
    delete $counted{$dir};
    delete $total{$dir};
}

die "Usage: $0 [DIRECTORY...]\n" if (@ARGV && $ARGV[0] =~ /^-/);
push(@ARGV, ".") unless @ARGV;

finddepth({ wanted => \&count, postprocess => \&exeunt}, @ARGV);


igel
Дата: 24 января 2019 г. в 20:41:45

Автор: igel