On 2021-01-06 11:17, Kamran via Cygwin wrote:
"ls" (version 8.26) sorts wrongly if given large number of files via "find" or
"xargs"
For example:
find -type f -exec ls -oS -h {} +
OR
find -type f -print0 | xargs -0r ls -oS -h
Gives following data. Sorry for the long listing, and wrapped lines. But search
for "setup.ini" which is about 17 MB, it is sorted AFTER very small files.
In fact it seams that sorting is restarted from that file (subsequent files are
again sorted). Note also that removing "-h" from "ls" command lines results in
the same problem.
(output is trimmed to remove unnecessary data, i.e. perms/user/date-time, but
order is the same)
Shells and programs have limited command line lengths, so the target program may
be run multiple times by find or xargs, more times when the file path names are
long, as fewer file path names can fit in each command line, so output line
lengths from ls and numbers of files sorted together will vary.
You can reduce this impact by changing to the closest common directory to your
files, and using shell and ls options and features to get similar results e.g.
$ ( cd .../release/; ls -hoS **/*.{tar.*z*,ini}; )
--
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.
[Data in binary units and prefixes, physical quantities in SI.]
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple