查找更高版本的文件

Find the file with higher version

我在Linuxbash工作。

我有一个目录,里面有这样的文件:

我想获取最新的文件版本名,应该是xpto-40.20.30.tar.xz.

我正在使用这个脚本:

#!/bin/bash

set_latest () {
  eval "latest=${$#}"
}
set_latest xpto-*.tar.xz
echo "The highest-numbered file is $latest"

但我得到的结果是它的 xpto-40.20。9.tar.xz

我猜这是因为字符数。 我怎样才能得到最新的文件版本名称(考虑到这种情况)? 有没有办法只获得版本“40.30.30”?

建议:

ls -1 *.tar.xz| sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"  |sort|tail -1|sed -E "s|0([1-9])||g"

以更易读的方式:

ls -1 *.tar.xz|\
sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"  |\
sort|\
tail -1|\
sed -E "s|0([1-9])||g"

渐进运行

ls -1 *.tar.xz |
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}" 
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort|tail -1
ls -1 *.tar.xz |sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"|sort|tail -1|0([1-9])||g"

说明

ls -1 *.tar.xz

列出当前目录中后缀为 .tar.xz 的所有文件。每行一个文件名。

sed -E "{s|\.([1-9]\.)|.0|;s|\.([1-9]\.)|.0|}"

在每个文件名中以个位数为前缀0

sort

对所有文件名进行词汇排序

tail -1

获取最后一个文件名

sed -E "s|0([1-9])||g"

从文件名中的 2 位数字中删除 0 前缀