11

Рекурсивный подсчет файлов в директории Linux

16

Как можно рекурсивно подсчитать количество файлов в директории Linux?

Я нашел следующее решение:

find DIR_NAME -type f ¦ wc -l

Но когда я пытаюсь его запустить, возникает следующая ошибка:

find: пути должны предшествовать выражению: ¦

5 ответ(ов)

1

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

find . -type f | wc -l

Здесь find . -type f ищет все файлы (-type f) в текущем каталоге и его подкаталогах. Затем результат передается в команду wc -l, которая подсчитывает количество строк, что соответствует количеству найденных файлов. Обратите внимание, что точка (.) указывает на текущую директорию.

1

На моем компьютере rsync оказывается немного быстрее, чем find | wc -l, как указано в принятом ответе:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

Во второй строке указано количество файлов, в данном примере это 150481. В качестве бонуса также отображается общий размер (в байтах).

Некоторые замечания:

  • Первая строка является общим количеством файлов, директорий, символических ссылок и т. д. вместе взятых, поэтому она больше второй строки.
  • Важно использовать опцию --dry-run (или короткую -n), чтобы не выполнять фактическую передачу файлов!
  • Я использовал опцию -x, чтобы "не пересекать границы файловой системы", что означает, что если вы выполните это для /, а у вас подключены внешние жесткие диски, то подсчитываться будут только файлы на корневом разделе.
1

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

for i in */ .*/ ; do echo -n $i": " ; (find "$i" -type f | wc -l) ; done

Этот код можно записать в одну строку. Скобки нужны для того, чтобы было понятно, вывод какого именно выражения ожидается командой wc -l (в данном случае - это результат find $i -type f).

0

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

$ tree

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

$ sudo apt-get install tree

(на системах Linux Debian / Mint / Ubuntu).

Эта команда показывает не только количество файлов, но и количество директорий отдельно. Опция -L позволяет указать максимальный уровень отображения (по умолчанию это максимальная глубина дерева директорий).

Также можно включить скрытые файлы, добавив опцию -a.

0

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

find DIR_NAME -type f -printf "." | wc -c

Обратите внимание: опция -printf работает только с утилитой find из набора GNU findutils. Возможно, вам потребуется установить её, например, на Mac.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь