Subject: Re: bug#10915: 8.13: df -- overly long output lines are very hard to read

From: Bernhard Voelker <[email-masked]>
Date: Thu, 26 Jul 2012 17:43:22 +0200

On 07/26/2012 04:23 PM, Pádraig Brady wrote:
> On 03/01/2012 10:56 AM, Voelker, Bernhard wrote:
>>
>> What about a more general --fmt (or --format) option to
>> just get the columns you want in the order you want?
>> E.g.
>>
>>   df --format=size,free%,mnt,fs
>> or
>>   df --format=size-h,mnt  # <column name>-h or 
>>   df --format=Size,mnt    # uppercase Size meaning -h
> 
> This is a border line feature, but I'm 60:40 for implementing it.
> 
> Note something similar I noticed is:
> 
>   findmnt -l -o FSTYPE,SOURCE,TARGET
> 
> It would make sense to align as closely to that as possible.
> So a full --output list supported by df could be
> FSTYPE,SOURCE,TARGET,SIZE,USED,AVAIL,FREEPCT
> 
> It's probably sufficient to use this to just order fields,
> and leave other formatting to existing modifiers.

Implementing --output=<field-list> is of course much simpler
than what Jim proposed [1]:
he suggested a stat-like --format option which takes %-directives.

That would be much more flexible for the user, and the existing
output formats would just be a pre-defined format strings.

We could for the first time have blocks and inodes statistics
in one command:

  %i  inodes
  %I  inodes in percent
  %a  AVAIL
  %A  AVAIL in percent
  %u  unused
  %U  unused percentage
  %t  total size
  %T  FSTYPE
  %s  SOURCE
  %m  TARGET (mount point)
  ...

  df --format="%u:%i:%T:%m"

And some directives could have mixed SIZE modifiers, e.g.

  %{SIZE}u	used blocks with SIZE like KMGTPEZY.
  %{SIZE}i      inode number

  df --format="%Tt %Gu %Ki %m"

Scripts could parse the output of --format (or --printf) much
safer (SOURCE and TARGET can include almost any characters like
'\n', '\t', etc. but never e.g. NULL)

  df --printf="%U\0%s\0%m\0\n"

As already said, this would be a greater change in df.c,
but some code could surely be shared with stat.c and maybe
in future with "ls --format=..." ;-)

I'm not against --output, but the advantage of a more
flexible --printf is unbeatable IMO.

Have a nice day,
Berny

[1] http://lists.gnu.org/archive/html/bug-coreutils/2012-03/msg00007.html