Verificar el tamaño de la carpeta en Bash
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
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
-c
para ver una línea Total al final. Ejemplo:du -hcs
odu -hc
.Elimine el argumento
-h
para ver los tamaños en KiB exactos en lugar de formatos MiB o GiB legibles por humanos. Ejemplo:du -s
odu -cs
.
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 du
muestra el espacio en disco utilizado; y no el tamaño del archivo.
Puede utilizarlo --apparent-size
si 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 -h
la opción (legible por humanos) dentro de un script.
En su lugar, puede utilizarlo -b
para una comparación más sencilla dentro del script.
Pero debes tener en cuenta que esto -b
se aplica --apparent-size
por 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-size
o-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
Para verificar el tamaño de todos los directorios dentro de un directorio, puede usar:
du -h --max-depth=1