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
-d
opción eslist directories only
.Esto parece hacer lo que quieres:
El
grep
comando 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
getopts
para "robar" cualquier-L
opción y su argumento de latree
línea de comando, si hay una. Si no hay un-L n
opción en la línea de comando, entonces eso también funciona.Todas las demás opciones y argumentos se pasan al
tree
comando.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
-L
que era un problema, no lo mencionaste-d
en absoluto. Ahora que miro más de cerca los números informados,tree --du
ni lostree --du -d
tamaños de los informes que de alguna manera se parecen a los informados pordu
.tree --du
no parece dar tamaños correctos para directorios de todos modos, con o sin-d
o-L
. No tengo idea de cuáles son los números, pero no están relacionados con losdu
informes.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/log
se muestra en modo de árbol pero solo el tamaño de los archivos, las carpetas están en conteos
tree -ah /var/log -L 1
fuente
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.getopts
es que las opciones pueden aparecer en cualquier orden en la línea de comando. La versión inicial de lamytree
funció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-builtingetopts
para procesar la-L
opción. Esto permitió que la-L n
opción apareciera en cualquier lugar de la línea de comando. También permitió que fuera completamente opcional.getopts
permite 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 elgetopt
programa (tenga en cuenta que no tiene uns
) delutil-linux
paquete, 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.