Pregunta Usando ls para listar directorios y sus tamaños totales


¿Es posible usar ls en Unix para listar el tamaño total de un subdirectorio y todos sus contenidos, a diferencia del 4K usual que (supongo) es solo el archivo del directorio en sí mismo? ES DECIR.

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

Después de buscar en las páginas de manual, me estoy quedando vacío.


615
2018-06-19 17:29


origen


Respuestas:


Pruebe algo como:

du -sh *

versión corta de:

du --summary --human-readable *

Explicación:

du: reisk Usabio

-s: Muestra un resumen para cada archivo especificado. (Equivalente a -d 0)

-h: Salida "legible por humanos". Use los sufijos de la unidad: segundoyte, Kibibyte (KiB), METROebibyte (MiB), GRAMOibibyte (GiB), Tebibyte (TiB) y PAGebibyte (PiB). (BASE2)


1162
2018-06-19 17:30



du -sk * | sort -n ordenará las carpetas por tamaño. Útil cuando buscas espacio libre ...


253
2018-04-09 08:50



du -sh * | sort -h

Esto se mostrará en formato legible para humanos.


75
2017-11-08 17:16



Para enumerar los directorios más grandes del directorio actual en formato legible para personas:

du -sh * | sort -hr

Una mejor manera de restringir el número de filas puede ser

du -sh * | sort -hr | head -n10

Donde puede aumentar el sufijo de -n bandera para restringir el número de filas enumeradas

Muestra:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

Hace que sea más conveniente leer :)


23
2017-08-16 22:36



Para mostrarlo en ls -lh formato, uso:

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

Código Awk explicado:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

Muestra de salida:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd

21
2018-02-18 11:38



El comando que desea es 'du -sk' du = "uso de disco"

El indicador -k le da salida en kilobytes, en lugar de los sectores predeterminados de disco (bloques de 512 bytes).

El distintivo -s solo mostrará elementos en el directorio de nivel superior (es decir, el directorio actual, de forma predeterminada, o el directorio especificado en la línea de comandos). Es extraño que du tenga el comportamiento opuesto de ls en este sentido. Por defecto, du le dará de forma recursiva el uso del disco de cada subdirectorio. Por el contrario, ls solo dará los archivos de lista en el directorio especificado. (ls -R le da un comportamiento recursivo).


20
2018-06-22 21:29



Ponga esta declaración de función de shell en sus scripts de inicialización de shell:

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}

lo llamé duls porque muestra la salida de ambos du y ls (en ese orden):

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

Explicación:

los paste la utilidad crea columnas a partir de su entrada de acuerdo con la especificación que le proporcione. Dado dos archivos de entrada, los pone uno al lado del otro, con una pestaña como separador.

Le damos la salida de du -hs -- "$@" | cut -f1 como el primer archivo (flujo de entrada realmente) y el resultado de ls -ld -- "$@" como el segundo archivo.

En la función, "$@" evaluará la lista de todos los argumentos de línea de comando, cada uno entre comillas dobles. Por lo tanto, comprenderá caracteres globbing y nombres de ruta con espacios, etc.

Los dobles negativos (--) señala el final de las opciones de línea de comando para du y ls. Sin estos, diciendo duls -l confundiría du y cualquier opción para du ese ls no debería confundir ls (y las opciones que existen en ambas utilidades podrían no significar lo mismo, y sería un desastre).

los cut después du simplemente corta la primera columna del du -hssalida (los tamaños).

Decidí poner el du salida a la izquierda; de lo contrario, habría tenido que gestionar una columna derecha tambaleante (debido a la diferente longitud de los nombres de los archivos).

El comando no aceptará banderas de línea de comando.

Esto ha sido probado en ambos bash y en ksh93. No funcionará con /bin/sh.


7
2018-06-25 20:42



Yo siempre uso du -sk (-k bandera que muestra el tamaño del archivo en kilobytes).


6
2018-06-19 17:31