Как подсчитать количество всех файлов / папок, существующих в системе, с помощью командной строки?
Я могу найти это с помощью графического интерфейса, просто открыв окно свойств для целую папку /, но было бы неплохо узнать, как это сделать, используя командную строку.
Мне нужна целая серия команд или будет только одна возможность?
1 метод будет
sudo find / -type f | wc -l
sudo find / -type d | wc -l
(sudo для предотвращения доступа к ошибкам)
f для файлов, d для каталогов.
The / proc / файловая система будет выходить из строя, но я не рассматриваю эти файлы;)
Если вы действительно хотите общее количество объектов в ваших файловых системах, используйте 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 для подсчета файлов без каталогов. (Вы не хотите исключать свои символические ссылки, не так ли?)
sudo find / -type f | wc -l
сообщит вам количество обычных файлов в вашей системе и
sudo find / -type d | wc -l
количество папок.
Использование zsh:
В качестве root для обычных файлов:
files=( /**/*(.D) )
это займет все обычные файлы, включая те, которые начинаются с . в массив files, теперь мы можем просто подсчитать количество элементов массива:
echo $#files
это будет обрабатывать все случаи краев, например необычные имена файлов.
Аналогично для каталогов:
dirs=( /**/*(/D) )
echo $#dirs
Другой подход, который использует locatedb:
locate / | wc -l
Преимущества:
Не требуется sudo. Гораздо быстрее, чем подходы, основанные на find (уже предварительно проиндексированные) Уже применяется -xdev: т.е. пропускает специальные файлы: /dev, /proc и т. Д.Недостатки:
Не требуется sudo подход df -i Гораздо быстрее, чем подходы find (уже предварительно проиндексированные)