Как я могу использовать find
для создания списка каталогов, которые содержат наибольшее количество файлов. Я бы хотел, чтобы список был от самого высокого до самого низкого. Я бы только хотел листинг идти на 1 уровень глубокой, и я обычно запускать эту команду из верхней части моей файловой системы, то есть /
.
21
Ответы:
Использование инструментов GNU:
Это использует две
find
команды. Первый находит каталоги и передает их вwhile
цикл, запускает следующий поиск для каждого каталога. Второй перечисляет все дочерние файлы / каталоги на первом уровне, в то время какgrep
считает их.grep
Позволяет-print0
использоваться со второй находкой , так какwc
не имеет-z
эквивалента. Это останавливает пересчет имен файлов с новой строкой дважды (хотя использованиеwc
и не-print0
будет иметь большого значения).Результат второго
find
помещается в аргумент,echo
так что имя каталога можно легко разместить в одной строке ($(..)
конструкция автоматически обрезает символ новой строки в концеgrep
). Затем строки сортируются по номеру, а 50 самых больших номеров отображаются с помощьюhead
.Обратите внимание, что это также будет включать в себя каталоги точек монтирования верхнего уровня. Простой способ обойти это - использовать связывание, а затем использовать каталог монтирования. Сделать это:
Более переносимое решение использует разные экземпляры оболочки для каждого каталога (также здесь дан ответ ):
Образец вывода:
источник
ОБНОВЛЕНИЕ: я сделал все это ниже, что круто, но я придумал лучший способ сортировки каталогов по использованию inode:
И если вы хотите остаться в той же файловой системе, вы делаете:
Вот пример выходных данных:
ТЕПЕРЬ С ЛС:
Несколько человек упомянули, что у них нет современных coreutils, и опция --inodes для них недоступна. Итак, вот ls:
Это дает мне почти идентичные результаты для
du
команды:DU:
LS:
Я думаю
include
, что все зависит от того, на какой каталог программа сначала смотрится - потому что они одинаковые и жестко связаны. Вроде как вещь выше. Хотя я могу ошибаться в этом - и я приветствую исправление ...Основополагающий метод этого заключается в том, что я заменяю каждое из
ls
имен файлов на содержащее его имя каталога вsed.
разделе «Далее» ... Ну, я сам немного нечеткий. Я вполне уверен, что он точно считает файлы, как вы можете видеть здесь:DU DEMO
Создайте тестовый каталог:
Некоторые детские каталоги:
Сделайте несколько файлов:
Некоторые жесткие ссылки:
Посмотрите на жесткие ссылки:
Они считаются в одиночку, но на один каталог вверх ...
Затем я запустил свой скрипт запуска снизу и:
И Грэм:
Так что я думаю, что это показывает, что единственный способ подсчитать inode - это inode. А поскольку подсчет файлов означает подсчет инодов, вы не можете вдвойне подсчитывать иноды - для точного подсчета файлов иноды не могут быть подсчитаны более одного раза.
OLD:
Я нахожу это быстрее, и это портативно:
Это не обязательно
-exec
для каждого каталога - он использует только одинsh
процесс ell и одинfind
. Я должен получитьset -- $glob
право по-прежнему включать.hidden
файлы и все остальное, но это очень близко и очень быстро. Вы бы простоcd
вошли в любой корневой каталог для проверки, и все готово.Вот пример моего выходного прогона
/usr
:Я также использую
sed
в нижней части, чтобы обрезать его до 50 лучших результатов.head
было бы быстрее, конечно, но я также обрежу каждую строку при необходимости:Правда, это грубо, но это была мысль. Другое использование я Неочищенный устройство сброса
2>stderr
для обоихfind
иcd
в2>/dev/null
. Это просто чище, чем смотреть на ошибки прав доступа для каталогов, которые я не могу прочитать без доступа root - возможно, мне следует это указатьfind
. Ну, это работа в процессе.Итак, я исправил оболочки оболочки следующим образом:
На самом деле я собирался задать вопрос о том, как это можно сделать, но когда я печатал в заголовке вопроса, сайт указал мне на предложенный связанный вопрос, где, о чудо, Стефан уже взвешен . Так что это было удобно. Очевидно
[^.],
, что это хорошо поддерживается, но не переносимо, и вы должны использовать это, как!bang.
я обнаружил в комментарии Стефана.В любом случае, очевидно, что просто потянуть скрытые файлы было недостаточно. Поэтому мне придется
set
дважды, чтобы избежать поиска позиционеров для литерала$glob
. Тем не менее, это, похоже, никак не влияет на производительность и надежно добавляет каждый файл в каталог.источник
ls -i
и ... я думаю ... возможноgrep
... возможно ... может быть ... ну, вы используете,-xdev,
что является началом ...uniq
иsort
?du
вы используете? Мойdu
не имеет--inodes
выбора.Почему бы не использовать что-то вроде KDirStat Хотя изначально он был написан для KDE, но он прекрасно работает и с GNOME, он дает вам лучшее представление о количестве файлов / dir и соответствующем использовании в GUI.
источник