简体   繁体   中英

UNIX: Sort files by number/version without 0 padding

Ultimately, I wanted to set the latest version as an environment variable, so supplementing the selected answer (which provided me the correct sorting):

export LATEST_VERSION=$(printf '%s\n' * | sort -rV | head -1)

I have a directory with the following directory names:

ls -1r .
2.0
1.8
16.1
16.0
15.5
15.0
14.5
14.1
14.0
1.3
1.2
1.1.5
1.1.3
1.1.2

I would like to sort them to get the latest release version:

ls -1r . | head -1
16.1

So the underlying order should look like this:

16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2

Any help would be greatly appreciated. Simpler the better, but I'm open to any solution. Thanks!

Modern GNU sort offers a -V flag for sorting according to version number rules:

$ printf '%s\n' * | sort -rV
16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2

Note that the above does not use ls . As a general rule, you shouldn't parse the output of ls(1) .

Documentation

From man sort :

-V, --version-sort
natural sort of (version) numbers within text

The above is from the GNU man page.

FreeBSD's sort also supports -V .

OSX

Apple's sort is a GNU sort from the year 2005 which predates support for the -V option. A work-around can be found here . (Hat tips: l'L'l, mklement0)

FWIW, I'm in Mac OS right now, and haven't booted over to linux to test. But, it looks like sort with the numeric option has the smarts to do it:

But, I have a directory with your subdirectories in it, and ls sorts it badly:

/Users/thedave/tmp $ ls -1r
2.0
16.1.12
16.1
16.0
15.5
15.0
14.5
14.1
14.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2
1.1
1.0.1
1.0

sort(1) accepts '-n' for numeric and '-r' for reverse:

/Users/thedave/tmp $ ls | sort -rn
16.1.12
16.1
16.0
15.5
15.0
14.5
14.1
14.0
2.0
1.8
1.3
1.2
1.1.5
1.1.3
1.1.2
1.1
1.0.1
1.0

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM