The ls command without the -l option and with the --time=mtime option, is incorrectly sorting by the name rather than by the modification time.
ls # sorts by name (ok) ls --time=mtime # sorts by name (should sort by mtime) ls --time=ctime # sorts by ctime (ok) ls --time=atime # sorts by atime (ok) ls --time=birth # sorts by birth (ok) ls -c # sorts by ctime (ok) ls -c --time=mtime # sorts by name (should sort by mtime) ls -c --time=ctime # sorts by ctime (ok) ls -c --time=atime # sorts by atime (ok) ls -c --time=birth # sorts by birth (ok) ls -u # sorts by atime (ok) ls -u --time=mtime # sorts by name (should sort by mtime) ls -u --time=ctime # sorts by ctime (ok) ls -u --time=atime # sorts by atime (ok) ls -u --time=birth # sorts by birth (ok) // The current statement in ls.c (lines 2383-2387) sort_type = (0 <= sort_opt ? sort_opt : (format != long_format && (time_type == time_ctime || time_type == time_atime || time_type == time_btime)) ? sort_time : sort_name); // Proposed correction (untested) sort_type = (0 <= sort_opt ? sort_opt : (format != long_format && (time_type == time_ctime || time_type == time_atime || time_type == time_btime || time_type == time_mtime)) ? sort_time : sort_name); ls (GNU coreutils) 9.4 Linux 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux