Me pregunto si podemos combinar la honestidad de 'du' con el formato sangrado de 'tree'. Si quiero una lista de los tamaños de directorios:
du -hx -d2
... muestra dos niveles de profundidad y todos los resúmenes de tamaño son honestos, pero no hay sangría de subdirecciones. Por otra parte:
tree --du -shaC -L 2
... sangra y colorea muy bien, sin embargo, los tamaños reportados son una mentira. Para obtener los tamaños reales, uno debe:
tree --du -shaC
... lo que quiere decir que solo obtienes los tamaños verdaderos si dejas que 'tree' te muestre la estructura completa del directorio. Me gustaría poder tener siempre resúmenes de tamaño correctos independientemente de cuántos niveles de subdirecciones quiera mostrar realmente. A menudo hago esto:
tree -du -shaC | grep "\[01;34m"
... que elimina todo menos los directorios, y los sangra muy bien ... pero no hay una manera fácil de limitar la visualización a solo un determinado número de niveles (sin los resúmenes). ¿Hay alguna manera? Quizás he perdido los interruptores correctos ...
fuente

No necesita grep para el código de color, la
-dopción eslist directories only.Esto parece hacer lo que quieres:
El
grepcomando elimina todas las líneas que tienen (uno o más espacios seguidos de un no espacio seguido de un espacio) dos veces, seguido de un[.Si desea una profundidad de 1, cambie el conteo encuadernado dentro de las {} llaves en
{1}lugar de{2}. lo mismo si quieres una profundidad de 3, cámbiala a{3}.Puede convertir esto en una función de shell, así:
Esto usa
getoptspara "robar" cualquier-Lopción y su argumento de latreelínea de comando, si hay una. Si no hay un-L nopción en la línea de comando, entonces eso también funciona.Todas las demás opciones y argumentos se pasan al
treecomando.La
local PATTERN=...línea no es realmente necesaria. Solo lo hice así para asegurarme de que encajaría en una línea y no de una sola palabraU&L. La expresión regular podría y probablemente debería ir directamente altree | grep ...línea.Ejecútelo así:
o
fuente
-Lque era un problema, no lo mencionaste-den absoluto. Ahora que miro más de cerca los números informados,tree --duni lostree --du -dtamaños de los informes que de alguna manera se parecen a los informados pordu.tree --duno parece dar tamaños correctos para directorios de todos modos, con o sin-do-L. No tengo idea de cuáles son los números, pero no están relacionados con losduinformes.Puedes usar dutree
fuente
No hay ninguna herramienta de comando perfecta para hacer esto, pero encontré dos formas que son cercanas.
muestra el tamaño de las carpetas y los archivos, pero no se muestra en modo de árbol.
du -ah --max-depth=1 /var/logse muestra en modo de árbol pero solo el tamaño de los archivos, las carpetas están en conteos
tree -ah /var/log -L 1fuente
Inspirado por cas, ahora estoy haciendo esto:
fuente
"$@"inmediatamente después del-shaC. de lo contrario, esa función está codificada para funcionar solo para el directorio actual.getoptses que las opciones pueden aparecer en cualquier orden en la línea de comando. La versión inicial de lamytreefunción que escribí usaba "$ 1" al igual que la suya, por lo que el argumento de profundidad tenía que ser el primer argumento, y no era opcional. Decidí que no era lo suficientemente bueno, así que usé bash-builtingetoptspara procesar la-Lopción. Esto permitió que la-L nopción apareciera en cualquier lugar de la línea de comando. También permitió que fuera completamente opcional.getoptspermite escribir scripts que toman opciones y argumentos reales (en lugar de solo argumentos en posiciones codificadas como $ 1 $ 2 $ 3, etc.), al igual que la mayoría de los otros programas en su sistema. Y si usa elgetoptprograma (tenga en cuenta que no tiene uns) delutil-linuxpaquete, puede usar tanto las opciones cortas de una sola letra (por ejemplo-l) como las opciones largas (como--long) al igual que los programas GNU.