Мне интересно, можем ли мы объединить честность 'du' с отступом форматирования 'tree'. Если я хочу список размеров каталогов:
du -hx -d2
... отображает два уровня глубины, и все сводки размеров являются честными, но здесь нет отступов подкаталогов. С другой стороны:
tree --du -shaC -L 2
... отступы и цвета красиво, однако сообщенные размеры являются ложью. Чтобы получить реальные размеры, необходимо:
tree --du -shaC
... что означает, что вы получите истинные размеры, только если вы позволите 'tree' показать вам всю структуру каталогов. Я хотел бы иметь возможность всегда иметь правильные итоговые размеры независимо от того, сколько уровней я хочу отображать. Я часто делаю это:
tree -du -shaC | grep "\[01;34m"
... который удаляет все, кроме каталогов, и красиво делает отступы ... но нет простого способа ограничить отображение только определенным количеством уровней (без подведения итогов). Есть ли способ? Возможно, я пропустил правильные переключатели ...
источник
Вам не нужно grep для цветового кода,
-d
опция естьlist directories only
.Кажется, это делает то, что вы хотите:
Команда
grep
удаляет все строки, которые имеют (один или несколько пробелов, за которыми следует не пробел, а затем пробел) дважды, после чего следует символ[
.Если вы хотите, чтобы глубина составляла 1, измените счетчик границ внутри фигурных скобок {}
{1}
вместо{2}
. То же самое, если вы хотите глубину 3, измените его на{3}
.Вы можете превратить это в функцию оболочки, вот так:
Используется
getopts
для «кражи» любого-L
параметра и его аргумента изtree
командной строки, если таковой имеется. Если-L n
в командной строке нет опции, то это тоже работает.Все остальные параметры и аргументы передаются
tree
команде.local PATTERN=...
Линия не является действительно необходимым. Я сделал это только так, чтобы убедиться, что он умещается в одну строку, а не перенос словU&L
. Регулярное выражение может и, вероятно, должно идти прямо вtree | grep ...
строке.Запустите это так:
или
источник
-L
как проблему, не упомянул-d
вообще. Теперь, когда я более внимательно посмотреть на цифры сообщил, ни ,tree --du
ниtree --du -d
размеры отчетов , которые каким - либо образом напоминают, сообщаемыхdu
.tree --du
похоже, не дает правильных размеров для каталогов, с или без-d
или-L
. Я понятия не имею, какими должны быть цифры, но они не связаны с какимиdu
отчетами.Вы можете использовать Dutree
источник
Не существует идеального командного инструмента для этого, но я нашел два совершенно незаметных способа.
показывает размер папок и файлов, но не отображается в режиме дерева.
du -ah --max-depth=1 /var/log
показывает в режиме дерева, но только размер файла, папки в счетчиках
tree -ah /var/log -L 1
источник
Вдохновленный cas, я сейчас делаю это:
источник
"$@"
сразу же после-shaC
. в противном случае эта функция жестко запрограммирована для работы только с текущим каталогом.getopts
является то, что параметры могут появляться в любом порядке в командной строке. Первоначальная версияmytree
функции, которую я написал, использовала «$ 1» так же, как и ваша, поэтому аргумент глубины должен был быть первым аргументом, и он не был обязательным. Я решил, что это не достаточно хорошо, поэтому использовал встроенную в bashgetopts
для обработки-L
опцию. Это позволило-L n
опции появляться в любом месте командной строки. Это также позволило ему быть полностью необязательным.getopts
вы можете писать сценарии, которые принимают реальные параметры и аргументы (а не просто аргументы в жестко запрограммированных позициях, таких как $ 1 $ 2 $ 3 и т. д.), как и большинство других программ в вашей системе. И если вы используетеgetopt
программу (обратите внимание, что безs
) изutil-linux
пакета, вы можете использовать как короткие однобуквенные параметры (например-l
), так и длинные (например--long
), как программы GNU.