ls -l
ti darà la dimensione apparente del file, che è il numero di byte che un programma leggerebbe se leggesse il file dall'inizio alla fine. du
ti darebbe la dimensione del file "su disco".
Per impostazione predefinita, du
ti dà la dimensione del file in numero di blocchi del disco, ma puoi usare -h
per ottenere invece un'unità leggibile dall'uomo. Vedi anche il manuale per du
sul tuo sistema.
Nota che con du
di GNU coreutil (che è probabilmente quello che hai su Linux), -b
ottenere byte implica il --apparent-size
opzione. Questo non è ciò che si desidera utilizzare per ottenere il numero di byte effettivamente utilizzati sul disco. Usa invece --block-size=1
o -B 1
.
Con GNU ls
, puoi anche eseguire ls -s --block-size=1
sul file. Questo darà lo stesso numero di du -B 1
per il file.
Esempio:
$ 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
Ciò significa che si tratta di un file da 512 MB che occupa circa 24 KB su disco. È un scarso file (principalmente zeri che non vengono effettivamente scritti su disco ma rappresentati come "buchi" logici nel file). I file sparsi sono comuni quando si lavora con file di grandi dimensioni preallocati, ad es. immagini disco per macchine virtuali o file di scambio ecc. La creazione di un file sparse è veloce, mentre riempirlo di zeri è lento (e non necessario).
Vedi anche il manuale per fallocate
sul tuo sistema Linux.
Ottengo la dimensione del file in byte in questo modo:
actualsize=$(du -b "${file}" | cut -f 1)