On Mon 03 Jun 2024 at 18:29:17 (-0400), Greg Wooledge wrote:
> On Mon, Jun 03, 2024 at 10:45:28PM +0200, Franco Martelli wrote:
> > On 03/06/24 at 16:32, Greg Wooledge wrote:
> > > duhs() {
> > >      (
> > >        shopt -s dotglob
> > >        printf '%s\0' "${1:-.}"/*/ | xargs -0 du -sh
> > >      )
> > > }
> > 
> > I've some issue with this function. It doesn't show the size of the
> > directory specified as argument, it follows the output of my original
> > function:
> 
> I started writing a response to this, because it seemed easy enough to
> fix -- just add "${1:-.}" to the printf arguments, so it gets passed
> along to du -sh, and included in the output.
> 
> But then I tested it.
> 
> hobbit:~$ du -sh /usr/local /usr/local/bin
> 684M    /usr/local
> 
> What?  Where's the second line?
> 
> hobbit:~$ du -sh /usr/local/bin /usr/local/etc
> 81M     /usr/local/bin
> 4.0K    /usr/local/etc
> 
> Multiple arguments are allowed....
> 
> hobbit:~$ du -sh /usr/local/bin /usr/local/etc /usr/local
> 81M     /usr/local/bin
> 4.0K    /usr/local/etc
> 603M    /usr/local
> 
> You're even allowed to have a parent directory after its children...
> 
> hobbit:~$ du -sh /usr/local /usr/local/bin /usr/local/etc
> 684M    /usr/local
> 
> ... but if the parent is FIRST, the children get... swallowed up by
> it?  Huh?  And if the parent is last, then the value shown for the
> parent excludes the children that were already reported on?
> 
> Why the HELL is it like this?!
> 
> It doesn't even match its own documentation.  Here's what the info
> page says:
> 
> ‘-s’
> ‘--summarize’
>      Display only a total for each argument.
> 
> There's supposed to be a total *FOR EACH ARGUMENT*.  There isn't.
> 
> OK, I officially wash my hands of ANY solution based on du -s.  If
> you want to try to make it work sensibly, more power to you.  As far
> as I'm concerned, though, this is broken.  Irreparably broken.

Try adding -l. The idea is that du is trying to avoid double-counting,
so when the subdirectories come first, those ones are "used up" by
the time it reaches the parent. When the parent is first, it's (all)
the subdirectories instead that have been "used up".

Cheers,
David.

Reply via email to