Public bug reported:

After updating to Ubuntu 26.04, I've noticed that `ls` doesn't sort
filenames correctly when the `--group-directories-first` option is
specified. First the system info.

----- <SNIP> -----
$ lsb_release -rd
Description:    Ubuntu 26.04 LTS
Release:        26.04

$ ls --version
ls (uutils coreutils) 0.8.0

$ dpkg -S $(which ls)
coreutils-from-uutils: /usr/bin/ls

$ dpkg -l \*coreutils\* | grep ^ii
ii  coreutils             9.5-1ubuntu2+0.0.0~ubuntu25 all          coreutils 
meta package
ii  coreutils-from-uutils 0.0.0~ubuntu25              all          coreutils 
from the uutils project
ii  gnu-coreutils         9.7-3ubuntu2                amd64        GNU core 
utilities
ii  rust-coreutils        0.8.0-0ubuntu3              amd64        Universal 
coreutils utils, written in Rust

$ env | grep -E 'LANG|LC'
LANG=en_US.UTF-8
----- </SNIP> -----

Now create a test directory with a mix of files and directories.

----- <SNIP> -----
$ mkdir /tmp/ls_test
                                                                                
                           
$ cd /tmp/ls_test

$ for i in {a..z}; do
>    if [[ $i =~ ^[cgjnquy]$ ]]; then
>       mkdir $i
>    else
>       date > $i
>    fi
> done
----- </SNIP> -----

Onto the actual test.

----- <SNIP> -----
$ ls -l   # ungrouped results for comparison                                    
                                                    
total 76
-rw-r----- 1 adric adric 32 Jun  3 09:29 a
-rw-r----- 1 adric adric 32 Jun  3 09:29 b
drwxr-x--- 2 adric adric 40 Jun  3 09:29 c
-rw-r----- 1 adric adric 32 Jun  3 09:29 d
-rw-r----- 1 adric adric 32 Jun  3 09:29 e
-rw-r----- 1 adric adric 32 Jun  3 09:29 f
drwxr-x--- 2 adric adric 40 Jun  3 09:29 g
-rw-r----- 1 adric adric 32 Jun  3 09:29 h
-rw-r----- 1 adric adric 32 Jun  3 09:29 i
drwxr-x--- 2 adric adric 40 Jun  3 09:29 j
-rw-r----- 1 adric adric 32 Jun  3 09:29 k
-rw-r----- 1 adric adric 32 Jun  3 09:29 l
-rw-r----- 1 adric adric 32 Jun  3 09:29 m
drwxr-x--- 2 adric adric 40 Jun  3 09:29 n
-rw-r----- 1 adric adric 32 Jun  3 09:29 o
-rw-r----- 1 adric adric 32 Jun  3 09:29 p
drwxr-x--- 2 adric adric 40 Jun  3 09:29 q
-rw-r----- 1 adric adric 32 Jun  3 09:29 r
-rw-r----- 1 adric adric 32 Jun  3 09:29 s
-rw-r----- 1 adric adric 32 Jun  3 09:29 t
drwxr-x--- 2 adric adric 40 Jun  3 09:29 u
-rw-r----- 1 adric adric 32 Jun  3 09:29 v
-rw-r----- 1 adric adric 32 Jun  3 09:29 w
-rw-r----- 1 adric adric 32 Jun  3 09:29 x
drwxr-x--- 2 adric adric 40 Jun  3 09:29 y
-rw-r----- 1 adric adric 32 Jun  3 09:29 z

$ ls -l --group-directories-first     # filenames are no longer sorted
total 76
drwxr-x--- 2 adric adric 40 Jun  3 09:29 j
drwxr-x--- 2 adric adric 40 Jun  3 09:29 y
drwxr-x--- 2 adric adric 40 Jun  3 09:29 c
drwxr-x--- 2 adric adric 40 Jun  3 09:29 u
drwxr-x--- 2 adric adric 40 Jun  3 09:29 q
drwxr-x--- 2 adric adric 40 Jun  3 09:29 n
drwxr-x--- 2 adric adric 40 Jun  3 09:29 g
-rw-r----- 1 adric adric 32 Jun  3 09:29 m
-rw-r----- 1 adric adric 32 Jun  3 09:29 z
-rw-r----- 1 adric adric 32 Jun  3 09:29 b
-rw-r----- 1 adric adric 32 Jun  3 09:29 k
-rw-r----- 1 adric adric 32 Jun  3 09:29 l
-rw-r----- 1 adric adric 32 Jun  3 09:29 a
-rw-r----- 1 adric adric 32 Jun  3 09:29 h
-rw-r----- 1 adric adric 32 Jun  3 09:29 o
-rw-r----- 1 adric adric 32 Jun  3 09:29 p
-rw-r----- 1 adric adric 32 Jun  3 09:29 i
-rw-r----- 1 adric adric 32 Jun  3 09:29 r
-rw-r----- 1 adric adric 32 Jun  3 09:29 s
-rw-r----- 1 adric adric 32 Jun  3 09:29 t
-rw-r----- 1 adric adric 32 Jun  3 09:29 e
-rw-r----- 1 adric adric 32 Jun  3 09:29 v
-rw-r----- 1 adric adric 32 Jun  3 09:29 w
-rw-r----- 1 adric adric 32 Jun  3 09:29 x
-rw-r----- 1 adric adric 32 Jun  3 09:29 d
-rw-r----- 1 adric adric 32 Jun  3 09:29 f

$ ls -l --group-directories-first --sort=name     # specify an explicit sort 
(allowed per the manpage)                    
total 76
drwxr-x--- 2 adric adric 40 Jun  3 09:29 j
drwxr-x--- 2 adric adric 40 Jun  3 09:29 y
drwxr-x--- 2 adric adric 40 Jun  3 09:29 c
drwxr-x--- 2 adric adric 40 Jun  3 09:29 u
drwxr-x--- 2 adric adric 40 Jun  3 09:29 q
drwxr-x--- 2 adric adric 40 Jun  3 09:29 n
drwxr-x--- 2 adric adric 40 Jun  3 09:29 g
-rw-r----- 1 adric adric 32 Jun  3 09:29 m
-rw-r----- 1 adric adric 32 Jun  3 09:29 z
-rw-r----- 1 adric adric 32 Jun  3 09:29 b
-rw-r----- 1 adric adric 32 Jun  3 09:29 k
-rw-r----- 1 adric adric 32 Jun  3 09:29 l
-rw-r----- 1 adric adric 32 Jun  3 09:29 a
-rw-r----- 1 adric adric 32 Jun  3 09:29 h
-rw-r----- 1 adric adric 32 Jun  3 09:29 o
-rw-r----- 1 adric adric 32 Jun  3 09:29 p
-rw-r----- 1 adric adric 32 Jun  3 09:29 i
-rw-r----- 1 adric adric 32 Jun  3 09:29 r
-rw-r----- 1 adric adric 32 Jun  3 09:29 s
-rw-r----- 1 adric adric 32 Jun  3 09:29 t
-rw-r----- 1 adric adric 32 Jun  3 09:29 e
-rw-r----- 1 adric adric 32 Jun  3 09:29 v
-rw-r----- 1 adric adric 32 Jun  3 09:29 w
-rw-r----- 1 adric adric 32 Jun  3 09:29 x
-rw-r----- 1 adric adric 32 Jun  3 09:29 d
-rw-r----- 1 adric adric 32 Jun  3 09:29 f
----- </SNIP> -----

Repeat the above using `LANG=C`, just to rule out issue being related to
`LANG=en_US.UTF-8`.

----- <SNIP> -----
$ LANG=C ls -l                                                                  
                                                    
total 76
-rw-r----- 1 adric adric 32 Jun  3 09:29 a
-rw-r----- 1 adric adric 32 Jun  3 09:29 b
drwxr-x--- 2 adric adric 40 Jun  3 09:29 c
-rw-r----- 1 adric adric 32 Jun  3 09:29 d
-rw-r----- 1 adric adric 32 Jun  3 09:29 e
-rw-r----- 1 adric adric 32 Jun  3 09:29 f
drwxr-x--- 2 adric adric 40 Jun  3 09:29 g
-rw-r----- 1 adric adric 32 Jun  3 09:29 h
-rw-r----- 1 adric adric 32 Jun  3 09:29 i
drwxr-x--- 2 adric adric 40 Jun  3 09:29 j
-rw-r----- 1 adric adric 32 Jun  3 09:29 k
-rw-r----- 1 adric adric 32 Jun  3 09:29 l
-rw-r----- 1 adric adric 32 Jun  3 09:29 m
drwxr-x--- 2 adric adric 40 Jun  3 09:29 n
-rw-r----- 1 adric adric 32 Jun  3 09:29 o
-rw-r----- 1 adric adric 32 Jun  3 09:29 p
drwxr-x--- 2 adric adric 40 Jun  3 09:29 q
-rw-r----- 1 adric adric 32 Jun  3 09:29 r
-rw-r----- 1 adric adric 32 Jun  3 09:29 s
-rw-r----- 1 adric adric 32 Jun  3 09:29 t
drwxr-x--- 2 adric adric 40 Jun  3 09:29 u
-rw-r----- 1 adric adric 32 Jun  3 09:29 v
-rw-r----- 1 adric adric 32 Jun  3 09:29 w
-rw-r----- 1 adric adric 32 Jun  3 09:29 x
drwxr-x--- 2 adric adric 40 Jun  3 09:29 y
-rw-r----- 1 adric adric 32 Jun  3 09:29 z

$ LANG=C ls -l --group-directories-first                                        
                                                    
total 76
drwxr-x--- 2 adric adric 40 Jun  3 09:29 j
drwxr-x--- 2 adric adric 40 Jun  3 09:29 y
drwxr-x--- 2 adric adric 40 Jun  3 09:29 c
drwxr-x--- 2 adric adric 40 Jun  3 09:29 u
drwxr-x--- 2 adric adric 40 Jun  3 09:29 q
drwxr-x--- 2 adric adric 40 Jun  3 09:29 n
drwxr-x--- 2 adric adric 40 Jun  3 09:29 g
-rw-r----- 1 adric adric 32 Jun  3 09:29 m
-rw-r----- 1 adric adric 32 Jun  3 09:29 z
-rw-r----- 1 adric adric 32 Jun  3 09:29 b
-rw-r----- 1 adric adric 32 Jun  3 09:29 k
-rw-r----- 1 adric adric 32 Jun  3 09:29 l
-rw-r----- 1 adric adric 32 Jun  3 09:29 a
-rw-r----- 1 adric adric 32 Jun  3 09:29 h
-rw-r----- 1 adric adric 32 Jun  3 09:29 o
-rw-r----- 1 adric adric 32 Jun  3 09:29 p
-rw-r----- 1 adric adric 32 Jun  3 09:29 i
-rw-r----- 1 adric adric 32 Jun  3 09:29 r
-rw-r----- 1 adric adric 32 Jun  3 09:29 s
-rw-r----- 1 adric adric 32 Jun  3 09:29 t
-rw-r----- 1 adric adric 32 Jun  3 09:29 e
-rw-r----- 1 adric adric 32 Jun  3 09:29 v
-rw-r----- 1 adric adric 32 Jun  3 09:29 w
-rw-r----- 1 adric adric 32 Jun  3 09:29 x
-rw-r----- 1 adric adric 32 Jun  3 09:29 d
-rw-r----- 1 adric adric 32 Jun  3 09:29 f

$ LANG=C ls -l --group-directories-first --sort=name                            
                                                    
total 76
drwxr-x--- 2 adric adric 40 Jun  3 09:29 j
drwxr-x--- 2 adric adric 40 Jun  3 09:29 y
drwxr-x--- 2 adric adric 40 Jun  3 09:29 c
drwxr-x--- 2 adric adric 40 Jun  3 09:29 u
drwxr-x--- 2 adric adric 40 Jun  3 09:29 q
drwxr-x--- 2 adric adric 40 Jun  3 09:29 n
drwxr-x--- 2 adric adric 40 Jun  3 09:29 g
-rw-r----- 1 adric adric 32 Jun  3 09:29 m
-rw-r----- 1 adric adric 32 Jun  3 09:29 z
-rw-r----- 1 adric adric 32 Jun  3 09:29 b
-rw-r----- 1 adric adric 32 Jun  3 09:29 k
-rw-r----- 1 adric adric 32 Jun  3 09:29 l
-rw-r----- 1 adric adric 32 Jun  3 09:29 a
-rw-r----- 1 adric adric 32 Jun  3 09:29 h
-rw-r----- 1 adric adric 32 Jun  3 09:29 o
-rw-r----- 1 adric adric 32 Jun  3 09:29 p
-rw-r----- 1 adric adric 32 Jun  3 09:29 i
-rw-r----- 1 adric adric 32 Jun  3 09:29 r
-rw-r----- 1 adric adric 32 Jun  3 09:29 s
-rw-r----- 1 adric adric 32 Jun  3 09:29 t
-rw-r----- 1 adric adric 32 Jun  3 09:29 e
-rw-r----- 1 adric adric 32 Jun  3 09:29 v
-rw-r----- 1 adric adric 32 Jun  3 09:29 w
-rw-r----- 1 adric adric 32 Jun  3 09:29 x
-rw-r----- 1 adric adric 32 Jun  3 09:29 d
-rw-r----- 1 adric adric 32 Jun  3 09:29 f
----- </SNIP> -----

Doing the same test on Ubuntu 24.04 results in both the directory and
file groupings being sorted by name.

----- <SNIP> -----
$ lsb_release -rd
No LSB modules are available.
Description:    Ubuntu 24.04.4 LTS
Release:        24.04

$ LANG=C ls -l --group-directories-first
total 104
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 c
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 g
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 j
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 n
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 q
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 u
drwxr-x--- 2 adric adric 4096 Jun  3 09:38 y
-rw-r----- 1 adric adric   32 Jun  3 09:38 a
-rw-r----- 1 adric adric   32 Jun  3 09:38 b
-rw-r----- 1 adric adric   32 Jun  3 09:38 d
-rw-r----- 1 adric adric   32 Jun  3 09:38 e
-rw-r----- 1 adric adric   32 Jun  3 09:38 f
-rw-r----- 1 adric adric   32 Jun  3 09:38 h
-rw-r----- 1 adric adric   32 Jun  3 09:38 i
-rw-r----- 1 adric adric   32 Jun  3 09:38 k
-rw-r----- 1 adric adric   32 Jun  3 09:38 l
-rw-r----- 1 adric adric   32 Jun  3 09:38 m
-rw-r----- 1 adric adric   32 Jun  3 09:38 o
-rw-r----- 1 adric adric   32 Jun  3 09:38 p
-rw-r----- 1 adric adric   32 Jun  3 09:38 r
-rw-r----- 1 adric adric   32 Jun  3 09:38 s
-rw-r----- 1 adric adric   32 Jun  3 09:38 t
-rw-r----- 1 adric adric   32 Jun  3 09:38 v
-rw-r----- 1 adric adric   32 Jun  3 09:38 w
-rw-r----- 1 adric adric   32 Jun  3 09:38 x
-rw-r----- 1 adric adric   32 Jun  3 09:38 z
----- </SNIP> -----

** Affects: rust-coreutils (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2155164

Title:
  ls does not sort filenames when --group-directories-first is specified

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/rust-coreutils/+bug/2155164/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to