我有扩展名是数字的文件:
备份。1 备份。2 备份.3
我现在需要检查最高数字是多少并将此数字保存到变量中。(在上面的情况下,它将是 i=3)
这些问题在 bash 中实际上相当简单。Bash 提供了带有子字符串删除的参数扩展,可以轻松地从文件名中获取最终数字。它具有形式${var##*.}
,它只是从字符串的左侧搜索到最后一次出现'.'
删除所有字符,直到包括点,例如
var=backup.1
echo ${var##*.}
1
因此,您需要做的就是遍历与backup.[0-9]*
匹配的所有文件,并保留一个保存最大可见数字的max
变量,例如
max=0
for i in backup.[0-9]*; do
[ "${i##*.}" -gt $max ] && max="${i##*.}"
done
echo "max: $max"
根据您的文件输出,
max: 3
仔细查看,如果您有其他问题,请告诉我。
highest=$(ls backup* | sort -t"." -k2 -n | tail -n1 | sed -r 's/.*.(.*)/1/')
我的文件:
backup.1
backup.2
backup.3
backup.4
backup.5
backup.6
backup.7
backup.8
backup.9
backup.10
输出:
echo "${highest}"
10