Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Как подсчитать количество файлов и каталогов в Linux: Руководство для начинающих

Основы командной строки в Linux: Как найти точное число файлов и каталогов, используя командную строку.

Оригинал: How To Count Files And Directories In Linux: A Beginner's Guide
Автор: sk
Дата публикации:
Перевод: В. Костромин
Дата перевода: 11.03.2024 г.

Умение эффективно подсчитывать файлы и каталоги в Linux — ценный навык для системных администраторов и всех, кто работает с большими объемами данных. В этом руководстве я расскажу, как я использую простые инструменты командной строки, такие как find, wc и ls, для быстрого поиска точного количества файлов и папок в операционных системах Linux и Unix.

Давайте начнём!

Содержание статьи

Подсчет файлов в каталоге, используя команду find

Чтобы подсчитать все файлы по заданному пути, включая все его подкаталоги, вы можете использовать команду find с опциями wc -l в терминале Linux. Вот как вы можете это сделать:

1. Откройте терминал.

2. Используйте следующую команду (заменив /path/to/your/directory фактическим путем к вашему каталогу):

$ find /path/to/your/directory -type f | wc -l

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

  • find /path/to/your/directory запускает поиск в указанном каталоге.
  • -type f сообщает find, что нужно искать только файлы (а не каталоги).
  • Опция | (pipe) передает выходные данные команды find следующей команде.
  • Команда wc -l подсчитывает количество строк в выходных данных команды find, что соответствует количеству найденных ею файлов.

Таким образом будет выведено общее количество файлов в указанном каталоге и всех его подкаталогах.

Пример:

Чтобы подсчитать количество файлов в каталоге Downloads, нужно запустить следующую команду :

$ find ~/Downloads -type f | wc -l
5968
Count Files in a Directory from Command line in Linux
Подсчет файлов в каталоге из командной строки в Linux

Как вы можете видеть, в каталоге «Downloads» 5968 файлов.

Подсчет каталогов, используя команду find

В предыдущем примере мы подсчитали количество файлов в указанном месте. А что насчет каталогов? Можем ли мы использовать команду find для поиска подкаталогов в определенном каталоге?

Да, мы можем использовать командную строку, чтобы найти количество подкаталогов в данном каталоге в Linux. Мы снова воспользуемся командой find, но на этот раз мы будем искать каталоги (-type d), а не файлы.

$ find /path/to/the/directory -type d | wc -l

Просто замените /path/to/the/directory фактическим путем. Вот пояснения к этой команде:

  • find /path/to/the/directory запускает поиск в указанном каталоге.
  • -type d сообщает find, что нужно искать только каталоги.
  • Символ канала | (pipe) передает выходные данные команды find следующей команде.
  • Команда wc -l подсчитывает количество строк во входных данных, которые он получает, что соответствует количеству каталогов, найденных с помощью find.

Эта команда подсчитывает все каталоги, включая корневой каталог поиска.

Пример:

$ find ~/Downloads -type d | wc -l
563
Count Directories from Command line in Linux
Подсчет каталогов из командной строки в Linux

Как видите, в каталоге ~/Downloads 563 подкаталога, включая его самого.

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

Подсчет файлов и каталогов, используя команду find с опциями maxdepth и mindepth

При подсчете файлов и каталогов с помощью команды find в Linux эффективное использование параметров maxdepth и mindepth поможет вам точно нацелить поиск и избежать подсчета ненужных элементов.

Вот как вы можете использовать эти параметры вцелях подсчета.

Подсчет файлов в определенном диапазоне вложенности

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

Пример: Сосчитать файлы только во втором уровне подкаталогов:

$ find /path/to/directory -mindepth 2 -maxdepth 2 -type f | wc -l

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

Подсчет каталогов на определенном уровне вложенности

Аналогичным образом, чтобы подсчитать каталоги на определенном уровне вложенности, вы можете соответствующим образом настроить параметры mindepth и maxdepth.

Пример: Подсчет файлов на третьем уровне вложенности:

$ find /path/to/directory -mindepth 3 -maxdepth 3 -type d | wc -l

Исключение каталога верхнего уровня из подсчета

Если вы хотите при подсчёте исключить сам каталог верхнего уровня или любые элементы в каталоге верхнего уровня, вы можете использовать команду из следующего примера.

Пример: Подсчитываем все файлы, исключая каталог верхнего уровня:

$ find /path/to/directory -mindepth 1 -type f | wc -l

Пример: Подсчитываем подкаталоги, исключая каталог верхнего уровня:

$ find /path/to/directory -mindepth 1 -type d | wc -l

Подсчет всех файлов или каталогов до определенного уровня вложенности

Если вы хотите включить все до определенного уровня вложенноси, вы должны использовать maxlength без указания minlength.

Пример: Подсчёт всех файлов до второго уровня подкаталогов включительно:

$ find /path/to/directory -maxdepth 2 -type f | wc -l

Советы по эффективному использованию

  • Четко определите свою цель: Определите, интересуют ли вас файлы, каталоги или и то, и другое, и настройте параметр -type (f для файлов, d для каталогов). соответственно.
  • Учитывайте производительность: Поиск в очень глубоких структурах каталогов может занять много времени. Если вас интересует только определенный диапазон глубин, соответствующая установка maxlength и minlength может ускорить ваш поиск.
  • Проверьте свои предположения о глубине вложенности: Прежде чем запускать большую операцию подсчета, проверьте свою команду на небольшом подмножестве целевого каталога, чтобы убедиться, что вы выполняете подсчет на правильной глубине вложенности.

Вы можете подсчитывать файлы и папки в Linux более точно и быстро, настроив глубину поиска с помощью «minглубина» и «maxглубина» в зависимости от того, что вам нужно.

Подсчёт количества каталогов и их подкаталогов с помощью команды ls

Комбинация команд ls, grep и wc — это еще один метод подсчета количества подкаталогов в определенном каталоге, включая все его подкаталоги.

Перейдите в каталог, в котором вы хотите подсчитать количество подкаталогов.:

$ cd MyFiles/

И выполните следующую команду:

$ ls -lR | grep ^d | wc -l
488

Как видно из приведенного выше вывода, общее количество подкаталогов в ~/MyFiles составляет 488.

Вот краткое объяснение того, как работает эта команда:

  • ls -lR: Эта команда рекурсивно выводит список всех файлов и каталогов в текущем каталоге и его подкаталогах, показывая подробную информацию о каждом файле и каталоге.
  • grep ^d: Эта команда фильтрует выходные данные команды ls -lR, выбирая только строки, начинающиеся с буквы «d», обозначающей каталоги.
  • wc -l: Эта команда подсчитывает количество строк в выводе, сгенерированном командой grep ^d.

Таким образом, в целом команда перечисляет все каталоги и подкаталоги в текущем каталоге и его подкаталогах, затем подсчитывает количество каталогов и выводит это число. По сути, она сообщает вам, сколько каталогов существует в текущем каталоге и его подкаталогах.

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

Почему команды find и ls показывают разное количество при подсчете каталогов?

Команды ls -lR | grep ^d | wc -l и find /path/to/directory -type d | wc -l обе подсчитывают количество каталогов, но делают это по-разному, что может привести к разным результатам.

Причины этого следующие:

1. Скрытые каталоги:

  • find command: По умолчанию find включает в поиск и подсчет скрытые каталоги (начинающиеся с .).
  • ls -lR command: Эта комбинация без дополнительных опций не отображает скрытые каталоги, если это явно не указано (посредством использованием опции -a с ls).

2. Root Directory Count:

  • find command: Число, выдаваемое командой find /path/to/directory -type d | wc -l, включает корневой каталог, указанный в парметрах команды.
  • ls -lR | grep ^d | wc -l command: Этот метод обычно считает только подкаталоги, а не корневой каталог, из которого запускается команда, в зависимости от того, как вывод интерпретируется командой grep.

Заключение

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

Используя соответствующие команды, такие как find, ls и wc, вы можете эффективно получить точное количество файлов и каталогов в определенном месте или даже во всей вашей Linux-системе.

-------

Что ещё почитать на эту тему:

Как в Linux вывести список всех файлов каталога, упорядоченный по размеру

Как получить данные о жестких дисках в вашей Linux-системе