Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Several command line tools use the -h or --human-readable option to print file size in a human readable format (i.e., 36G vs 37550836).

  • Why is this option needed and not the default?
  • Aren't these tools mainly for output to humans?
share|improve this question

3 Answers 3

up vote 70 down vote accepted
  1. Because they didn't exist originally, and the default behavior is backwards compatible. Also, because they don't exist on all unix variants, and the default behavior is compatible with other unix variants.
  2. For many tools, because they are intended to be parseable by other tools. This is rarely the case for ls, but parsing the output of du or df is relatively common. (Mind, for df, you should use df -P when parsing.)
  3. Because some humans prefer the 37550836 format, because when you see a bunch of such numbers, their relative size is visually clear (number of digits).
share|improve this answer
19  
Especially 3) when I pipe the output straight through into sort -n because I'm less interested in quickly seeing the rough size of each directory and more in which subdirectory is taking up disproportionally too much space... –  Shadur Nov 14 '11 at 8:41
7  
@Shadur Ah but sort takes a -h too! –  quodlibetor Nov 14 '11 at 19:52
2  
I think 2 (e.g. for scripting) is the major reason. –  sml Nov 16 '11 at 1:27
    
@quodlibetor What OS/distro? kubuntu lucid sort does not accept -h and I can see no equivalent. –  Joe Nov 18 '11 at 23:03
6  
@user23861 sort -h was introduced in GNU coreutils 7.5. Lucid has 7.4, so on Ubuntu you need at least maverick. –  Gilles Nov 19 '11 at 2:30

Beside what Gilles said:

When these tools where invented hdd was very small, compared with today. You didn't need help to read a number like 400000.

And if you don't like it, use the alias system. In your home directory,

edit ~/.bashrc 

and insert, for example:

alias df='df -h'
alias du='du -h'

Note that in contrast to many other languages, you aren't allowed to have a blank before or behind the assignment operator (equal sign).

share|improve this answer

Note that if you set BLOCKSIZE=human-readable in your environment, this will be the default, at least for the commands from GNU coreutils, i.e. if you're using bash put:

export BLOCKSIZE=human-readable

in your $HOME/.bashrc file.

share|improve this answer
1  
Looks like BLOCKSIZE=h might be sufficient. But great tip! –  Mikel Apr 13 '12 at 1:38
    
The docs suggest BLOCK_SIZE=human-readable. Also didn't know about support for thousands separators until I read that. –  Mikel Apr 13 '12 at 5:38

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.