Я пытаюсь почистить жесткий диск, на котором накопились всякие дерьма, накопленные за эти годы. du
помог уменьшить использование диска, но все это громоздко не из-за общего размера, а из-за большого количества файлов и каталогов в целом.
Есть ли способ, которым я могу сделать что-то вроде, du
но не считая размер файла, а количество файлов и каталогов? Например: файл равен 1, а каталог - это рекурсивное количество файлов / каталогов внутри него + 1.
Изменить: я должен был быть более ясным. Я хотел бы знать не только общее количество файлов / каталогов /
, но также /home
и /usr
т. Д. И их подкаталогов, рекурсивно, как это du
делается для размера.
Ответы:
Я нашел
du --inodes
полезным, но я не уверен, какая версияdu
этого требует. На Ubuntu 17.10 работает следующее:Объединить с
| sort -nr
сортировкой по убыванию по количеству содержащихся inode.источник
Кажется, самый простой способ
find /path/to/search -ls | wc -l
Find используется для обхода всех файлов и папок.
-ls
перечислить (распечатать) все имена. Это значение по умолчанию, и если вы его опустите, оно будет работать практически на всех системах. (Почти, так как некоторые могут иметь разные значения по умолчанию). Это - хорошая привычка явно использовать это все же.Если вы просто используете
find /path/to/search -ls
часть, она распечатает все файлы и каталоги на вашем экране.wc
это количество слов.-l
опция говорит это , чтобы подсчитать количество строк.Вы можете использовать его несколькими способами, например,
Первый вариант позволяет wc открыть файл и подсчитать количество строк, слов и символов в этом файле. Вторая опция делает то же самое, но без имени файла она читает из стандартного ввода.
Вы можете комбинировать команды с каналом
|
. Выход первой команды будет передан на вход второй команды. Таким образом,find /path/to/search -ls | wc -l
использует find для вывода списка всех файлов и каталогов и передает вывод в wc. Wc подсчитывает количество строк.(Другой альтернативой был бы `ls | wc ', но найти гораздо более гибкий и хороший инструмент для изучения.)
[Изменить после комментария]
Возможно, было бы полезно объединить find и exec.
Например
find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
, в каталоге / будут перечислены все каталоги, за исключением тех, которые вы не хотите искать. Мы можем вызвать предыдущую команду для каждого из них, получив сумму файлов на папку в /.Однако:
Он будет работать на Linux, но не на любом unix-a-alike.
источник
Следующий скрипт PHP делает свое дело.
Поместите это в файл (скажем, "
treesize
")chmod +x
и запустите./treesize . | sort -rn | less
.источник
du
что это просто считается вместо суммы суммирования, что именно то, что задал оригинальный вопрос.ncdu отлично подходит для этого!
На странице руководства вы можете также показать количество по каталогам и по порядку:
Например:
источник
Используйте тот факт, что каталоги и файлы разделены
/
. Этот скрипт действительно соответствует вашим критериям, но служит для создания полного решения. Вы также должны рассмотреть возможность индексации ваших файлов с помощью locate.>
>
источник
Вот решение, которое использует bash, навеянное публикацией из Unix & Linux .
Если есть некоторые папки, которые вы не хотите видеть в деталях, например
.git
, вы можете исключить их из списка с помощьюgrep
.источник