如何从Bash脚本中的<string> _#文件名系列中选择最高编号

Jas*_*ick 2 string bash shell parsing

我有一个包含文件的目录

heat1.conf
heat2.conf
...
heat<n>.conf
minimize.conf
...
other files....
Run Code Online (Sandbox Code Playgroud)

我希望我的Bash脚本能够获取最高编号的文件名(因此我可以在找到错误条件时删除并替换它).

实现这一目标的最佳方法是什么?

请讨论解决方案的速度以及您认为这是最佳方法的原因.

gho*_*g74 6

如果您要仅在当前目录中列出文件,则无需使用find with maxdepth 1或使用ls.只需使用带有shell扩展的for循环.另外,expr是外部的.如果你的号码不包含小数,你可以使用bash自己的比较.

max=-1
for file in heat*.conf
do
  num=${file:4}
  num=${file%.conf}
  [[ $num -gt $max ]] && max=$num    
done
echo "max is: $max"
Run Code Online (Sandbox Code Playgroud)