Как подсчитать общее количество файлов / папок в системе?

Как подсчитать количество всех файлов / папок, существующих в системе, с помощью командной строки?

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

Мне нужна целая серия команд или будет только одна возможность?

1
задан 20 December 2015 в 11:14

5 ответов

1 метод будет

sudo find / -type f | wc -l
sudo find / -type d | wc -l

(sudo для предотвращения доступа к ошибкам) ​​

f для файлов, d для каталогов.

The / proc / файловая система будет выходить из строя, но я не рассматриваю эти файлы;)

7
ответ дан 23 May 2018 в 14:55
  • 1
    мне нужно sudo? все файлы выглядят следующим образом: find: ‘/run/lock/schroot’: Permission denied – DevRobot 19 December 2015 в 21:36
  • 2
    да. Я получил разрешение «запретил» его использование в качестве пользователя. – Rinzwind 19 December 2015 в 21:36
  • 3
    Я получил 483664 ... не так много, как я ожидал - это имеет смысл? – DevRobot 19 December 2015 в 21:40
  • 4
    У меня меньше: D Хммм. funny Вы столкнетесь с одной проблемой: система / proc / всегда меняется. – Rinzwind 19 December 2015 в 21:47
  • 5
    Вы должны использовать -xdev или, по крайней мере, исключить /proc, /sys и, вероятно, /dev. – muru 20 December 2015 в 11:13

Если вы действительно хотите общее количество объектов в ваших файловых системах, используйте df -i для подсчета inodes. Вы не получите разбивку между каталогами и обычными файлами, но на стороне плюса она работает почти мгновенно. Общее число используемых inodes - это то, что уже отслеживает файловые системы.

Если вы хотите использовать один из предложений, основанных на find, не просто запускайте его на /. Используйте find -xdev в списке точек монтирования, созданных чем-то вроде findmnt --list -v -U -t xfs,ext3,ext4,btrfs,vfat,ntfs -o TARGET или чего-то еще. Тем не менее, это не исключает возможности привязки привязок, поэтому файлы под привязкой привязок будут подсчитываться дважды. findmnt довольно круто.

Кроме того, конечно, есть простой способ перечислить все ваши «жесткие диски» без необходимости перечислять явные типы файловой системы, но я точно не знаю.

Как было предложено другим ответом, используйте find -printf . | wc -c, чтобы избежать возможных проблем с подсчетом смешных символов в именах файлов. Используйте -not -type d для подсчета файлов без каталогов. (Вы не хотите исключать свои символические ссылки, не так ли?)

5
ответ дан 23 May 2018 в 14:55
  • 1
    Это лучший подход, чем все другие ответы, предлагающие пройти всю файловую систему. Другой инструмент командной строки, который также можно использовать, - stat. Используя stat -f / или df -i /, оба получат данные с помощью системного вызова statfs, поэтому вывод этих двух команд всегда должен быть последовательным. – kasperd 20 December 2015 в 21:18
  • 2
    Примечание: df -i, похоже, не работает во всех файловых системах. например на btrfs он показывает 0 inodes. – arielf 26 December 2015 в 14:30
sudo find / -type f | wc -l

сообщит вам количество обычных файлов в вашей системе и

sudo find / -type d | wc -l

количество папок.

4
ответ дан 23 May 2018 в 14:55

Использование zsh:

В качестве root для обычных файлов:

files=( /**/*(.D) )

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

echo $#files

это будет обрабатывать все случаи краев, например необычные имена файлов.

Аналогично для каталогов:

dirs=( /**/*(/D) )
echo $#dirs
2
ответ дан 23 May 2018 в 14:55
  • 1
    @kos: но тогда нужно вручную различать обычные файлы и другие. – heemayl 20 December 2015 в 09:34
  • 2
    @kos Нет .., тогда вам нужно /*/**/*(.D) .. также это неправильно, поскольку он игнорирует любой файл в / – heemayl 20 December 2015 в 09:45

Другой подход, который использует locatedb:

locate / | wc -l

Преимущества:

Не требуется sudo. Гораздо быстрее, чем подходы, основанные на find (уже предварительно проиндексированные) Уже применяется -xdev: т.е. пропускает специальные файлы: /dev, /proc и т. Д.

Недостатки:

Не требуется sudo подход df -i Гораздо быстрее, чем подходы find (уже предварительно проиндексированные)
2
ответ дан 23 May 2018 в 14:55

Другие вопросы по тегам:

Похожие вопросы: