Кейсы

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

Вот несколько способов подсчитать количество файлов в каталоге в командной строке Linux.

Мы предполагаем, что вы знаете о команде wc для подсчета количества строк. Мы можем использовать ту же команду wc с командой ls для подсчета количества файлов в каталоге.

Эта задача кажется простой, но вскоре может стать немного сложной, в зависимости от ваших потребностей и определения количества файлов. Прежде чем мы вас запутаем, давайте рассмотрим различные варианты подсчета количества файлов в Linux.

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

Позвольте нам сначала показать вам содержимое тестового каталога, который я собираюсь использовать в этой статье:

daniilak:~/tutorials$ ls -la
total 64
drwxr-xr-x 4 destroyer destroyer 4096 Apr 29 17:53 .
drwxr-xr-x 55 destroyer destroyer 4096 Apr 29 15:50 ..
-rwxr–r– 1 destroyer destroyer 456 Mar 6 16:21 agatha.txt
-rw-r–r– 1 destroyer destroyer 0 Apr 16 19:53 .a.t
-rwxr–r– 1 destroyer destroyer 140 Mar 22 16:41 bash_script.sh
-rw-rw-r– 1 destroyer destroyer 95 Feb 11 13:12 cpluplus.cpp
-rw-r–r– 1 destroyer destroyer 1778 Apr 29 16:16 my_zip_folder.zip
drwxr-xr-x 4 destroyer destroyer 4096 Apr 19 19:07 newdir
-rw-r–r– 1 destroyer destroyer 163 Apr 13 15:07 prog.py
-rw-r–r– 1 destroyer destroyer 19183 Mar 18 18:46 services
-rw-r–r– 1 destroyer destroyer 356 Dec 11 21:35 sherlock.txt
-rwxrw-r– 1 destroyer destroyer 72 Jan 21 15:44 sleep.sh
drwxr-xr-x 3 destroyer destroyer 4096 Jan 4 20:10 target

Вы можете видеть, что у него есть 9 файлов (включая один скрытый файл) и 2 подкаталога в этом каталоге. Но вам не нужно делать это вручную. Давайте посчитаем количество файлов с помощью команд Linux.

Подсчитать количество файлов и каталогов (без скрытых файлов)

Вы можете просто запустить комбинацию команды ls и wc, и она отобразит количество файлов:

ls | wc -l

Вывод:

daniilak:~/tutorials$ ls | wc -l
10

Есть проблема с этой командой. Он считает все файлы и каталоги в текущих каталогах. Но он не видит скрытые файлы (файлы, имена которых начинаются с точки).

По этой причине приведенная выше команда показала мне количество файлов 10 вместо 11 (9 файлов и 2 каталога).

Подсчитать количество файлов и каталогов, включая скрытые файлы

Вы, наверное, уже знаете, что опция -s команды ls показывает скрытые файлы. Но если вы используете команду ls -a, она также отображает. (существующий каталог) и .. (родительский каталог). Вот почему вам нужно использовать параметр -A, который отображает скрытые файлы, исключая. и .. каталоги.

ls -A | wc -l

Это даст вам правильное количество файлов и каталогов в текущем каталоге. Посмотрите на вывод, который показывает количество 11 (9 файлов и 2 каталога):

daniilak:~/tutorials$ ls -A | wc -l
11

Вы также можете использовать эту команду для достижения того же результата:

ls -1A | wc -l

Обратите внимание, что используется опция 1 (один), а не l (L). Использование опции l (L) отображает дополнительную строку в начале вывода (см. «Всего 64» в выводе каталога в начале статьи). Использование 1 (одного) списка по одному контенту в строке, исключая дополнительную строку. Это дает более точный результат.

Подсчитать количество файлов и каталогов, включая подкаталоги

Пока что вы видите количество файлов и каталогов только в текущем каталоге. Он не учитывает файлы в подкаталогах.

Если вы хотите подсчитать количество файлов и каталогов во всех подкаталогах, вы можете использовать команду дерева.

tree -a

Эта команда показывает структуру каталогов, а затем выводит сводку внизу вывода.

daniilak:~/tutorials$ tree -a
.
├── agatha.txt
├── .a.t
├── bash_script.sh
├── cpluplus.cpp
├── my_zip_folder.zip
├── newdir
│   ├── new_dir
│   │   ├── c.xyz
│   │   ├── myzip1.zip
│   │   └── myzip2.zip
│   └── test_dir
│   ├── c.xyz
│   ├── myzip1.zip
│   └── myzip2.zip
├── prog.py
├── services
├── sherlock.txt
├── sleep.sh
└── target
├── agatha.txt
├── file1.txt
└── past
├── file1.txt
├── file2.txt
└── source1
└── source2
└── file1.txt
7 directories, 19 files

Как вы можете видеть в выводе, это показывает, что всего имеется 7 каталогов и 20 файлов. Хорошая вещь об этом результате – то, что он не считает каталоги в количестве файлов.

Считайте только файлы, а не каталоги

Пока что все решения, которые мы видели для подсчета количества файлов, также учитывают каталоги. Каталоги – это, по сути, файлы, но что если вы хотите считать только количество файлов, а не каталоги? Вы можете использовать замечательную команду поиска .

Вы можете запустить эту команду:

find . -type f | wc -l

Приведенная выше команда провела поиск всех файлов (тип f) в текущем каталоге и его подкаталогах.

daniilak:~/tutorials$ find . -type f | wc -l
20

Подсчитывать только файлы, а не каталоги и только в текущем каталоге, а не в подкаталогах

Это круто! Но что если вы хотите посчитать количество файлов в текущем каталоге, исключая только файлы в подкаталогах? Вы можете использовать ту же команду, что и выше, но с небольшой разницей.

Все, что вам нужно сделать, это добавить «глубину» вашей находки. Если вы установите его на 1, он не будет входить в подкаталоги.

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

Вот вывод сейчас:

daniilak:~/tutorials$ find . -maxdepth 1 -type f | wc -l
9