I'm using du
to get the file size of the result archive in a packager script:
> du -smh archive.zip
51M archive.zip
I'd like to assign just the 51M
part to a variable, to be able to print:
Archive size: 51M
How can I do that?
You can do it like so:
$ variable=$(du -smh archive.zip | awk '{print $1}')
awk
will parse the output breaking it up into columns. You want just the results from column #1. The $( .. ) code will run a command and return its results.
Or use the stat
program, if it's available (usually on Linux by default). No human-readable K/M/G conversion, but it also doesn't require anything else to get just the number / has nice formatting options:
sauer@humpy:~$ stat -c "%s" /etc/passwd
2302
sauer@humpy:~$ stat -c "%n size: %s bytes" /etc/passwd /etc/shadow
/etc/passwd size: 2302 bytes
/etc/shadow size: 1389 bytes
Awk is a bigger hammer than you need, use a knife and cut,
variable=$(du -smh archive.zip | cut -f1 )