GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener el tamaño real del directorio (fuera de du)?

Algunas versiones de du apoyar el argumento --apparent-size para mostrar el tamaño aparente en lugar del uso del disco. Entonces su comando sería:

du -hs --apparent-size

De las páginas de manual para du incluidas con Ubuntu 12.04 LTS:

--apparent-size
      print apparent sizes,  rather  than  disk  usage;  although  the
      apparent  size is usually smaller, it may be larger due to holes
      in (`sparse') files, internal  fragmentation,  indirect  blocks,
      and the like

Aquí hay una secuencia de comandos que muestra un tamaño de directorio legible por humanos utilizando las herramientas estándar de Unix (POSIX).

#!/bin/sh
find ${1:-.} -type f -exec ls -lnq {} \+ | awk '
BEGIN {sum=0} # initialization for clarity and safety
function pp() {
  u="+Ki+Mi+Gi+Ti+Pi+Ei";
  split(u,unit,"+");
  v=sum;
  for(i=1;i<7;i++) {
    if(v<1024) break;
    v/=1024;
  }
  printf("%.3f %sB\n", v, unit[i]);
}
{sum+=$5}
END{pp()}'

por ejemplo:

$ ds ~        
72.891 GiB

Asumiendo que tienes du de GNU coreutils, este comando debe calcular el tamaño aparente total de un número arbitrario de archivos regulares dentro de un directorio sin límites arbitrarios en el número de archivos:

find . -type f -print0 | du -scb --files0-from=- | tail -n 1

Agrega el -l opción a du si hay algunos archivos con enlaces fijos dentro y desea contar cada enlace duro por separado (por defecto du cuenta múltiples enlaces duros solo una vez).

La diferencia más importante con el du -sb simple es ese recursivo du también cuenta los tamaños de los directorios, que se informan de manera diferente según los diferentes sistemas de archivos; para evitar esto, el find El comando se usa para pasar solo archivos regulares a du . Otra diferencia es que los enlaces simbólicos se ignoran (si se deben contar, el find el comando debe ser ajustado).

Este comando también consumirá más memoria que el simple du -sb , porque usando el --files0-from=FILE hace du almacenar dispositivos y números de inodo de todos archivos procesados, a diferencia del comportamiento predeterminado de recordar solo archivos con más de un vínculo físico. (Esto no es un problema si -l La opción se usa para contar enlaces duros varias veces, porque la única razón para almacenar números de dispositivo e inodo es omitir archivos con enlaces duros que ya se han procesado.)

Si desea obtener una representación legible por humanos del tamaño total, simplemente agregue el -h opción (esto funciona porque du se invoca solo una vez y calcula el tamaño total, a diferencia de otras respuestas sugeridas):

find . -type f -print0 | du -scbh --files0-from=- | tail -n 1

o (si le preocupa que algunos efectos de -b luego son anulados por -h )

find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1

Linux
  1. Cómo obtener el tamaño del directorio en Linux

  2. ¿Cómo obtengo programáticamente el espacio libre en disco para un directorio en Linux?

  3. Cómo obtener todos los archivos que excedan cierto tamaño y eliminarlos

  4. Cómo obtener el tamaño de tar.gz en un archivo (MB) en python

  5. ¿Cómo puedo ver el tamaño de los archivos y directorios en Linux?

Cómo contar archivos en el directorio en Linux

Cómo aprovechar al máximo Qmmp 1.0

Cómo encontrar el tamaño de un directorio en Linux

Cómo encontrar el tamaño total de un directorio en Linux

Cómo verificar el tamaño de los archivos y directorios en Linux

¿Cómo averiguar los principales directorios o archivos que consumen espacio?