DU: solo muestra carpetas en profundidad


11

Estoy obteniendo resultados de du -hla siguiente manera:

103M    ./.wine/drive_c/windows/mono/mono-2.0/lib/mono
103M    ./.wine/drive_c/windows/mono/mono-2.0/lib
129M    ./.wine/drive_c/windows/mono/mono-2.0
129M    ./.wine/drive_c/windows/mono
362M    ./.wine/drive_c/windows
545M    ./.wine/drive_c

Me gustaría mostrar solo la carpeta más procesable, que es la carpeta ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

¿Hay alguna forma de eliminar la carpeta principal si una carpeta secundaria es responsable de la mayor parte del uso del espacio en disco?

Una configuración para mostrar solo las carpetas de hojas podría ser útil, o una configuración para restar el tamaño de todas las subcarpetas de una carpeta principal al calcular el tamaño de la carpeta principal.


Esto es a menudo más fácil de rastrear visualmente; ver ¿Cómo entender qué está ocupando espacio?
Gilles 'SO- deja de ser malvado'

Respuestas:


11

Si está utilizando GNU du, puede usar la opción -So --separate-dirspara no incluir el tamaño de los subdirectorios al calcular el uso para el padre.

Su ducomando puede no ser compatible con esta opción.

Puede usar esta pareja con sort para obtener los directorios individuales más grandes (suponiendo herramientas GNU):

du --separate-dirs -h . |sort -h

Esto parece satisfacer el 'restar el tamaño de todas las subcarpetas de una carpeta principal al calcular el tamaño de la parte de la carpeta principal' de mi consulta, ¡así que probablemente acepte! Sin embargo, no estoy seguro de que satisfaga exactamente mis necesidades (tratando de encontrar las carpetas más accionables para eliminar con el fin de recuperar espacio)
EoghanM

9

Personalmente, solo lo combino con el poder del género GNU:

du -ch | sort -h

Esto hará que los tamaños se ordenen en un formato legible para humanos. Por ejemplo:

$ du -h /usr/ | head -20 | sort -h
8.0K    /usr/src/linux-headers-3.2.0-3-common/include/misc
12K /usr/src/linux-headers-3.2.0-3-common/include/drm/i2c
12K /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter/ipv4
16K /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter/ipv6
20K /usr/src/linux-headers-3.2.0-3-common/include/net/phonet
28K /usr/src/linux-headers-3.2.0-3-common/include/acpi/platform
52K /usr/src/linux-headers-3.2.0-3-common/include/net/netns
60K /usr/lib32/libv4l
76K /usr/src/linux-headers-3.2.0-3-common/include/net/caif
96K /usr/src/linux-headers-3.2.0-3-common/include/scsi/fc
108K    /usr/src/linux-headers-3.2.0-3-common/include/net/bluetooth
112K    /usr/src/linux-headers-3.2.0-3-common/include/drm/ttm
148K    /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter
264K    /usr/src/linux-headers-3.2.0-3-common/include/rdma
284K    /usr/src/linux-headers-3.2.0-3-common/include/acpi
596K    /usr/src/linux-headers-3.2.0-3-common/include/drm
608K    /usr/src/linux-headers-3.2.0-3-common/include/scsi
668K    /usr/games
6.3M    /usr/lib32/gconv
8.9M    /usr/lib32

De man sort:

   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)

Todavía muestra los que no te importan, pero ahora es muy fácil encontrar los que sí.


No, eso en realidad lo empeora, ya que ahora se muestra 545M ./.wine/drive_cen la parte superior de la lista, a pesar de que solo contiene carpetas y ningún archivo, y hace que sea más difícil ver cómo se distribuye el espacio entre las subcarpetas (recursivas) de drive_c porque no No aparecen consecutivamente en la lista.
EoghanM

6

Si solo está buscando una vista claramente organizada, le recomiendo el dureppaquete.

Salida de ejemplo:

root@dogmeat:~# durep -td 4 -hs 50M /usr/
[ /usr     4.8G (0 files, 9 dirs) ]
   1.9G [###########                   ]  38.57% lib/
     463.6M [#######                       ]  24.46% x86_64-linux-gnu/
         102.3M [######                        ]  22.07% wine/
     276.2M [####                          ]  14.57% i386-linux-gnu/
          96.1M [##########                    ]  34.80% wine/
     222.4M [###                           ]  11.73% libreoffice/
         189.3M [#########################     ]  85.12% program/
     122.6M [#                             ]   6.47% chromium-browser/
          87.6M [#####################         ]  71.46% chromium-browser
      79.5M [#                             ]   4.19% virtualbox/
      79.4M [#                             ]   4.19% jvm/
          73.4M [###########################   ]  92.52% java-7-openjdk-amd64/
              73.4M [############################# ]  99.99% jre/
      75.7M [#                             ]   3.99% python2.7/
          58.4M [#######################       ]  77.21% dist-packages/
      58.9M [                              ]   3.11% firefox/
      52.2M [                              ]   2.75% libwireshark.so.2.0.2
   1.4G [########                      ]  29.56% src/
   1.2G [#######                       ]  26.03% share/
     211.6M [####                          ]  16.54% fonts/
         199.3M [############################  ]  94.18% truetype/
              84.2M [############                  ]  42.23% horai-umefont/
     174.6M [####                          ]  13.64% icons/
          91.5M [###############               ]  52.39% gnome/
              66.4M [#####################         ]  72.60% icon-theme.cache
      77.5M [#                             ]   6.05% gimp/
          77.5M [##############################] 100.00% 2.0/
              66.2M [#########################     ]  85.43% help/
      74.4M [#                             ]   5.82% virtualbox/
          56.9M [######################        ]  76.42% VBoxGuestAdditions.iso
      62.9M [#                             ]   4.91% doc/
 240.1M [#                             ]   4.89% bin/

Use el -tdparámetro para especificar la profundidad máxima y el -hsparámetro para especificar un tamaño mínimo para que una carpeta aparezca en los resultados.


2

En realidad, no estoy seguro si esto es lo que quiere, pero se puede despojar a los directorios padre usando GNU find's -execdir:

find . -type d -execdir du -ch "{}" \;

La -execdiropción es similar -execpero ejecuta el comando que proporciona en el subdirectorio donde findha encontrado un archivo.


hmmm, eso no parece funcionar como lo describe usted. Todavía obtengo muchos directorios principales en la salida.
EoghanM

2

Si está utilizando duuna profundidad fija, por ejemplo du -m -d 2 ., podría enmascarar líneas que no alcanzan su profundidad máxima de la siguiente manera:

du -m -d 2 . | sort -k1n | awk -F"/" 'NF==3'

En este caso, quería una profundidad de 2 directorios, así que solo mantuve los resultados con 3 campos como se define con la awkpalabra clave NFdespués de especificar "/"como mi separador de campo al comienzo.


0

Estos dos funcionan para mí:

 du -h | perl -ne '$n=()=$_=~m#/#g;  print unless $n > 2'
 du -h | perl -ne 'print unless ($n=()=$_=~m#/#g) > 2 '

Un pequeño comentario, para que los números coincidan, la coincidencia debe estar en un contexto de lista que explica por qué necesitamos ().
vi

du -h | perl -ne 'print a menos que (() = $ _ = ~ m # / # g)> 2'
vi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.