【问题标题】:finding latest version files in each directory在每个目录中查找最新版本的文件
【发布时间】:2016-11-22 18:43:42
【问题描述】:

我有带有版本的文件,即每个文件有 2 位数字后缀

例如:dphy/05E2.01、dphy/05E2.00、pll/05E2.43、pll/05E2.42 ...

我正在编写一个脚本来处理这些文件。可以列出,只有带有以下命令的版本化文件

find /path/ -type f -name '*.[0-9][0-9]'

但我只对每个目录中的最新版本文件感兴趣,即

dphy/05E2.01, pll/05E2.43

那么,如何只列出最新版本?

【问题讨论】:

  • 我建议编写一个可以执行一些算术运算的 bash 脚本。

标签: linux bash find command


【解决方案1】:
find /path/ -type f -name '*.[0-9][0-9]' |
awk -F '.' '{k=$0; sub(/\.[^.]+$/, "", k)} $NF>=max[k]{max[k]=$NF} 
      END{for (i in max) print i FS max[i]}'

/path/pll/05E2.43
/path/dphy/05E2.01

【讨论】:

  • 它列出了最新的文件版本,但非版本文件也与版本文件一起存在dphy/6P, dphy/05E2.01,所以find也列出了它们
  • 它可以工作,但是如果只有一个版本存在就会显示这个hdmidprx/05E2.,还请解释awk声明
  • awk 命令在 DOT 上拆分,因此在最后一个字段中的最后一个 DOT 之后保留部分。然后在第一个块中,我们使用sub 函数调用在最后一个 DOT 之后创建一个键 without 部分。然后在下一个块中,我们将每个版本号与最大版本号(即$NF>max[k])进行比较。如果我们得到的数字大于 max 数组中的数字,我们将使用 max[k]=$NF 存储它。最后在END 块中,我们打印每个条目
猜你喜欢
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多