Subject: bug#7439: closed (Re: bug#7439: du failing at "du -sh . *")

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 19 Nov 2010 16:48:02 +0000

Your bug report

#7439: du failing at "du -sh . *"

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
7439: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7439
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#7439: du failing at "du -sh . *"
From: Paul Eggert <[email-masked]>
To: Mathias Linnemann-Emden <[email-masked]>
Cc: [email-masked]
Date: Fri, 19 Nov 2010 08:52:39 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

On 11/18/2010 05:08 PM, Mathias Linnemann-Emden wrote:
> So not only the output of "du -sh . *" is wrong (not showing du for *),
> but also the output of "du -sh * ." is incorrect (showing only 4K
> instead of 8K for ".").

NEWS lists this as a bug fix in release 8.6:

  du no longer multiply counts a file that is a directory or whose
  link count is 1, even if the file is reached multiple times by
  following symlinks or via multiple arguments.

The idea is that a single invocation of du never counts the same
file twice.  This was always true for files with multiple hard
links (you probably didn't notice that), and now it's consistent
for all files.

To get something like the old behavior, you can use "du -l",
or invoke "du" separately for each file (depending on how you
want hard links treated).

Subject: du failing at "du -sh . *"
From: Mathias Linnemann-Emden <[email-masked]>
To: [email-masked]
Date: Fri, 19 Nov 2010 02:08:11 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hey there,

I don't know for sure if this is a bug in 'du' or not - but I've
requested several people to test it and we all get the same results:

$ mkdir du_test
$ cd du_test/
$ touch a b c d
$ echo "11111111" >e
$ du -sh . *
8,0K	.
$ du -sh * .
0	a
0	b
0	c
0	d
4,0K	e
4,0K	.
$ 

So not only the output of "du -sh . *" is wrong (not showing du for *),
but also the output of "du -sh * ." is incorrect (showing only 4K
instead of 8K for ".").

I use bash as my shell, but this also happens with sh, zsh, and several
other shells i've tried so far.

the version of coreutils I run is:

$ du --version
du (GNU coreutils) 8.7
Copyright © 2010 Free Software Foundation, Inc.

We've found out that the behaviour of du from coreutils 8.6 and below is
as expected:

$ mkdir du_test
$ cd du_test/
$ touch a b c d
$ echo "11111111" >e
$ du -sh . *
8,0K	.
0	a
0	b
0	c
0	d
4,0K	e
$ du -sh * .
0	a
0	b
0	c
0	d
4,0K	e
8,0K	.
$ 

I'm using ArchLinux with kernel 2.6.35-ARCH #1 SMP (x86_64). Filesystem
is ext4. The bug also is present on ext3, btrfs and ext2 filesystems (I
don't know if this might be of any relevance).

Please feel free to respond if you should have any further questions. 

Cheers

Mathias Linnemann-Emden