我在Linux bash工作.

我有一个目录,其中有如下文件:

  • xpto-10.20.30. tar xz公司
  • xpto-10.20.30. tar xz公司
  • xpto-20.20.30. tar xz公司
  • xpto-30.20.30. tar xz公司
  • xpto-10.20.30. tar xz公司
  • xpto-40.20.30. tar xz公司
  • xpo-40.20.9. tar xz公司

我想获取最新的文件版本名,应该是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公司

我想这是因为字符的数量.

推荐答案

建议:

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

以更具可读性的方式:

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

逐渐运行

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

解释

ls -1 *.tar.xz

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

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

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

sort

按字典对所有文件名排序

tail -1

获取最后一个文件名

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

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

Linux相关问答推荐

在Zenity进度窗口上单击取消后如何停止bash脚本

在Linux中随机化txt文件但保证不重复行

Linux PREEMPT_RT:SCHED_OTHER 的性能优于 SCHED_FIFO.为什么?

使用 AWK 过滤 Linux 输出

根据其他列的值创建一个新列

Linux 应用程序分析

当命令太长时,命令行会自动覆盖

如何排除 tar 的绝对路径?

在使用文件时截断文件 (Linux)

无法创建Java虚拟机

仅在不存在时添加换行符

与交换空间相关的链接器性能?

低功耗蓝牙:在 linux 中监听通知/指示

zsh/bash 上不区分大小写的 Glob

用于 ssh 的类似 teamviewer 的工具?

cmake : 从脚本设置环境变量

在 bash 中将输出作为 cp 的参数传递

是否有git sed或类似功能?

如何从 Linux 终端找到特定文件?

在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403