bash - subcadena - tamaño de archivo en linux
Compruebe el tamaño de la carpeta en Bash (8)
Para simplemente obtener el tamaño del directorio, nada más:
du --max-depth=0 ./directory
la salida parece
5234232 ./directory
Estoy tratando de escribir una secuencia de comandos que calcule el tamaño de un directorio y si el tamaño es inferior a 10 GB y más de 2 GB realiza alguna acción. ¿Dónde necesito 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
Para verificar el tamaño de todos los directorios dentro de un directorio, puede usar:
du -h --max-depth=1
Si ayuda, también puedes crear un alias en tu .bashrc
o .bash_profile
.
function dsize()
{
dir=$(pwd)
if [ "$1" != "" ]; then
dir=$1
fi
echo $(du -hs $dir)
}
Esto imprime el tamaño del directorio actual o el directorio que ha pasado como argumento.
Si solo desea ver el tamaño agregado de la carpeta y probablemente en formato MB o GB, intente con el siguiente script
$du -s --block-size=M /path/to/your/directory/
Si solo desea ver el tamaño de la carpeta y no las subcarpetas, puede usar:
du -hs /path/to/directory
Actualizar:
Debe saber que du
muestra el espacio en disco utilizado; y no el tamaño del archivo.
Puede usar --apparent-size
si desea ver la suma de los tamaños de archivo 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 la opción -h
(legible para humanos) dentro de un script.
En su lugar, puede utilizar -b
para facilitar la comparación dentro del script.
Pero debes tener en cuenta que -b
aplica --apparent-size
por sí mismo. 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
Tu puedes hacer:
du -h your_directory
lo que le dará el tamaño de su directorio de destino.
Si desea una salida breve, du -hcs your_directory
es agradable.
Utilice un resumen ( -s
) y bytes ( -b
). Puede cortar el primer campo del resumen con cut
. Poniendolo todo junto:
CHECK=$(du -sb /data/sflow_log | cut -f1)
# 10GB
SIZE="10"
# check the current size
CHECK="`du -hs /media/662499e1-b699-19ad-57b3-acb127aa5a2b/Aufnahmen`"
CHECK=${CHECK%G*}
echo "Current Foldersize: $CHECK GB"
if (( $(echo "$CHECK > $SIZE" |bc -l) )); then
echo "Folder is bigger than $SIZE GB"
else
echo "Folder is smaller than $SIZE GB"
fi