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

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

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

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

7
задан 20 December 2015 в 10:14

6 ответов

Начиная с файла / имена папок могут содержать новые строки:

sudo find / -type f -printf '.' | wc -c
sudo find / -type d -printf '.' | wc -c

Это будет считать любой файл / папка в токе / каталог. Но поскольку muru указывает, что Вы могли бы хотеть исключить виртуальный / другие файловые системы от количества (следующее исключит любую другую смонтированную файловую систему):

find / -xdev -type f -printf '.' | wc -c
find / -xdev -type d -printf '.' | wc -c
  • sudo find / -type f -printf '.': печатает точку для каждого файла в /;
  • sudo find / -type d -printf '.': печатает точку для каждой папки в /;
  • wc -c: считает количество символов.

Вот пример того, как не заботящийся о новых строках в файле / имена папок могут повредить другие методы такой как, например. find / -type f | wc -l и как использование find / -type f -printf '.' | wc -c на самом деле делает это правильным:

% ls
% touch "file
\`dquote> with newline"
% find . -type f | wc -l
2
% find . -type f -printf '.' | wc -c
1

Если STDOUT не является терминалом, find распечатает каждый файл / имя папки буквально; это означает, что файл / имя папки, содержащее новую строку, будет распечатан через две различных строки, и что wc -l будет считать две строки для единственного файла / папка, в конечном счете печатая результат прочь одним.

11
ответ дан 20 December 2015 в 10:14

Если Вы действительно хотите общее количество количество объектов в Ваших файловых системах, используйте 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
ответ дан 20 December 2015 в 20:14
  • 1
    переключение на режим прежней версии добилось цели! есть ли недостаток для установки в режиме прежней версии? – Adam Goldman 17 March 2017 в 01:06
sudo find / -type f | wc -l

скажет Вам количество регулярных файлов в Вашей системе, и

sudo find / -type d | wc -l

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

4
ответ дан 20 December 2015 в 20:14
  • 1
    Если Вам установили Windows в режиме UEFI, более удобно установить Ubuntu в режиме UEFI также - облегчает переключаться между этими двумя операционными системами. Но компьютер будет работать хорошо в обоих режимах BIOS и UEFI. Нет никакого недостатка относительно устойчивости или производительности в режиме BIOS. – sudodus 17 March 2017 в 02:14

1 метод был бы

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

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

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

/proc/файловая система будет ошибка, но я не рассматриваю те файлы;)

7
ответ дан 20 December 2015 в 20:14
  • 1
    Действительно я знаю о rufus, I' m пытающийся получить доступ к компьютеру окна. не легкий на Филиппинах! – Adam Goldman 17 March 2017 в 00:36

Используя zsh:

Как root, для регулярных файлов:

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

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

echo $#files

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

Так же для каталогов:

dirs=( /**/*(/D) )
echo $#dirs
2
ответ дан 20 December 2015 в 20:14
  • 1
    Я нашел, что режим IDE Legacy был только для разрешения начальной установки пройти. По некоторым причинам это doesn' t работают с AHCI на. Необходимо быть в состоянии, поворачиваются спиной к AHCI в BIOS после того, как установка завершается для получения более быстрого интерфейса HDD, потому что Ubuntu действительно поддерживает его. У меня не было проблем после выполнения этого. – Sam Wheel 17 March 2017 в 05:11

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

locate / | wc -l

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

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

Оборотные стороны:

  • Не точных 100%: включает каталоги, файлы пропусков под /tmp, могут double-or-more-count файлы с новыми строками на их имя, например
  • Медленнее, чем df -i, подход
  • Отражает "действительность снимка прошлых ~24 часов" вместо того, чтобы потребовать текущее состояние
2
ответ дан 20 December 2015 в 20:14
  • 1
    Ну, к сожалению, некоторые производители настраивают систему UEFI-BIOS вне стандартных спецификаций, и она может создать проблемы для Linux. – sudodus 17 March 2017 в 07:57

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

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