Next: , Previous: Sorting the output, Up: ls invocation


10.1.4 More details about version sort

The version sort takes into account the fact that file names frequently include indices or version numbers. Standard sorting functions usually do not produce the ordering that people expect because comparisons are made on a character-by-character basis. The version sort addresses this problem, and is especially useful when browsing directories that contain many files with indices/version numbers in their names:

     $ ls -1            $ ls -1v
     foo.zml-1.gz       foo.zml-1.gz
     foo.zml-100.gz     foo.zml-2.gz
     foo.zml-12.gz      foo.zml-6.gz
     foo.zml-13.gz      foo.zml-12.gz
     foo.zml-2.gz       foo.zml-13.gz
     foo.zml-25.gz      foo.zml-25.gz
     foo.zml-6.gz       foo.zml-100.gz

Note also that numeric parts with leading zeros are considered as fractional one:

     $ ls -1            $ ls -1v
     abc-1.007.tgz      abc-1.007.tgz
     abc-1.012b.tgz     abc-1.01a.tgz
     abc-1.01a.tgz      abc-1.012b.tgz

This functionality is implemented using the strverscmp function. See String/Array Comparison. One result of that implementation decision is that ls -v does not use the locale category, LC_COLLATE. As a result, non-numeric prefixes are sorted as if LC_COLLATE were set to C.