ls -l
le dará el tamaño aparente del archivo, que es la cantidad de bytes que un programa leería si leyera el archivo de principio a fin. du
le daría el tamaño del archivo "en el disco".
De forma predeterminada, du
le da el tamaño del archivo en número de bloques de disco, pero puede usar -h
para obtener una unidad legible por humanos en su lugar. Ver también el manual para du
en su sistema.
Tenga en cuenta que con du
de GNU coreutil (que es probablemente lo que tienes en Linux), -b
obtener bytes implica el --apparent-size
opción. Esto no es lo que desea usar para obtener la cantidad de bytes realmente utilizados en el disco. En su lugar, utilice --block-size=1
o -B 1
.
Con GNU ls
, también puedes hacer ls -s --block-size=1
en el archivo Esto dará el mismo número que du -B 1
para el archivo.
Ejemplo:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
Esto significa que se trata de un archivo de 512 MB que ocupa unos 24 KB en el disco. Es un escaso archivo (principalmente ceros que en realidad no se escriben en el disco sino que se representan como "agujeros" lógicos en el archivo). Los archivos dispersos son comunes cuando se trabaja con archivos grandes asignados previamente, p. imágenes de disco para máquinas virtuales o archivos de intercambio, etc. Crear un archivo disperso es rápido, mientras que llenarlo con ceros es lento (e innecesario).
Ver también el manual para fallocate
en su sistema Linux.
Obtengo el tamaño del archivo en bytes así:
actualsize=$(du -b "${file}" | cut -f 1)