Gostaria de saber se podemos combinar a honestidade de 'du' com a formatação recortada de 'tree'. Se eu quiser uma lista dos tamanhos de diretórios:
du -hx -d2
... exibe dois níveis de profundidade e todos os resumos de tamanho são honestos, mas não há recuo de subdiretórios. Por outro lado:
tree --du -shaC -L 2
... recuos e cores muito bem, no entanto, os tamanhos informados são uma mentira. Para obter os tamanhos reais, é necessário:
tree --du -shaC
... ou seja, você só obtém os tamanhos verdadeiros se você deixar 'tree' mostrar toda a estrutura de diretórios. Eu gostaria de poder sempre ter resumos de tamanho correto, independentemente de quantos níveis de subdiretórios eu realmente queira exibir. Costumo fazer isso:
tree -du -shaC | grep "\[01;34m"
... que remove tudo, exceto os diretórios, e os recua bem ... mas não há uma maneira fácil de limitar a exibição a apenas um determinado nível de número (sem os resumos). Há algum jeito? Talvez eu tenha perdido as opções corretas ...
fonte
Você não precisa de grep para o código de cores, a
-d
opção élist directories only
.Isso parece fazer o que você deseja:
O
grep
comando remove todas as linhas que possuem (um ou mais espaços seguidos por um não espaço seguido por um espaço) duas vezes, seguidos por a[
.Se você deseja uma profundidade de 1, altere a contagem de limites dentro das chaves {} para em
{1}
vez de{2}
. mesmo se você quiser uma profundidade de 3, mude para{3}
.Você pode transformar isso em uma função shell, da seguinte maneira:
Isso usa
getopts
para "roubar" qualquer-L
opção e seu argumento datree
linha de comando, se houver uma. Se não houver uma-L n
opção na linha de comando, isso funcionará também.Todas as outras opções e argumentos são passados para o
tree
comandoA
local PATTERN=...
linha não é realmente necessária. Eu só fiz assim para ter certeza de que caberia em uma linha e não em quebra de linha aquiU&L
. A expressão regular poderia e provavelmente deveria apenas ir diretamente natree | grep ...
linha.Execute-o assim:
ou
fonte
-L
como um problema, não mencionou-d
nada. Agora que olho mais de perto os números relatados,tree --du
nem ostree --du -d
tamanhos dos relatórios que de alguma forma se assemelham aos relatados pordu
.tree --du
parece não fornecer tamanhos corretos para diretórios, com ou sem-d
ou-L
. Não tenho idéia do que devem ser os números, mas eles não têm relação com osdu
relatórios.Você pode usar dutree
fonte
Não há nenhuma ferramenta de comando perfeita para fazer isso, mas eu encontrei duas maneiras próximas.
mostra o tamanho das pastas e dos arquivos, mas não é exibido no modo de árvore.
du -ah --max-depth=1 /var/log
mostra no modo de árvore, mas apenas no tamanho dos arquivos, as pastas estão em contagem
tree -ah /var/log -L 1
fonte
Inspirado em cas, agora estou fazendo o seguinte:
fonte
"$@"
imediatamente após o-shaC
. caso contrário, essa função será codificada para funcionar apenas no diretório atual.getopts
é que as opções podem aparecer em qualquer ordem na linha de comando. A versão inicial damytree
função que escrevi usava "$ 1", assim como a sua, portanto o argumento de profundidade tinha que ser o primeiro, e não era opcional. Decidi que não era bom o suficiente, então usei o bash-builtingetopts
para processar a-L
opção. Isso permitiu que a-L n
opção aparecesse em qualquer lugar da linha de comando. Também permitiu que fosse completamente opcional.getopts
permite escrever scripts que usam opções e argumentos reais (em vez de apenas argumentos em posições codificadas como $ 1 $ 2 $ 3 etc), assim como a maioria dos outros programas em seu sistema. E se você usar ogetopt
programa (observe que não há ums
) doutil-linux
pacote, poderá usar as opções curtas de uma letra (por exemplo-l
) e as opções longas (como--long
) como nos programas GNU.