Verificar el tamaño de la carpeta en Bash

Resuelto tom asked hace 11 años • 8 respuestas

Estoy intentando escribir un script que calcule el tamaño de un directorio y, si el tamaño es inferior a 10 GB y superior a 2 GB, realice alguna acción. ¿Dónde debo mencionar el nombre de mi carpeta?

# 10GB
SIZE="1074747474"

# check the current size
CHECK="`du /data/sflow_log/`"
if [ "$CHECK" -gt "$SIZE" ]; then
  echo "DONE"
fi
tom avatar May 21 '13 11:05 tom
Aceptado

Tu puedes hacer:

du -hs your_directory

lo que le dará un breve resultado del tamaño de su directorio de destino. Usando un comodín como *puede seleccionar varios directorios.

Si desea una lista completa de tamaños para todos los archivos y subdirectorios dentro de su destino, puede hacer:

du -h your_directory

Consejos:

  • Agregue el argumento -cpara ver una línea Total al final. Ejemplo: du -hcso du -hc.

  • Elimine el argumento -hpara ver los tamaños en KiB exactos en lugar de formatos MiB o GiB legibles por humanos. Ejemplo: du -so du -cs.

Mingyu avatar May 21 '2013 04:05 Mingyu

Si solo desea ver el tamaño de la carpeta y no las subcarpetas, puede usar:

du -hs /path/to/directory

Actualizar:

Debes saber que dumuestra el espacio en disco utilizado; y no el tamaño del archivo.

Puede utilizarlo --apparent-sizesi desea ver la suma de los tamaños de archivos reales.

--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

Y, por supuesto, no hay necesidad de -hla opción (legible por humanos) dentro de un script.

En su lugar, puede utilizarlo -bpara una comparación más sencilla dentro del script.

Pero debes tener en cuenta que esto -bse aplica --apparent-sizepor sí solo. Y puede que no sea lo que necesitas.

-b, --bytes
      equivalent to '--apparent-size --block-size=1'

así que creo que deberías usar --block-sizeo-B

#!/bin/bash
SIZE=$(du -B 1 /path/to/directory | cut -f 1 -d "   ")    
# 2GB = 2147483648 bytes
# 10GB = 10737418240 bytes
if [[ $SIZE -gt 2147483648 && $SIZE -lt 10737418240 ]]; then
    echo 'Condition returned True'
fi
Taxellool avatar Mar 10 '2014 08:03 Taxellool

Para verificar el tamaño de todos los directorios dentro de un directorio, puede usar:

du -h --max-depth=1
Michael Silverstein avatar Oct 18 '2018 16:10 Michael Silverstein