我被赋予了一个名字,我应该用这个名字创建一个目录。如果此目录已存在,则文件夹名称应以 _$number 作为后缀。
数字的计算方式为最大值 + 1。示例:
Name:awesome
Files: dummy awesome awesome_2 awesome_4 dummy_3
New folder: awesome_5Name:awesome
Files: dummy dummy_1
New folder: awesome
我的查找最高值的解决方案仅适用于没有特殊字符的名称。如果名称例如:"$#&*!(@)(%+#$ asdasd\^ Sad",则会失败。
function max_item() {
local prefix="$1"
local max="0"
shopt -s nullglob
for in_file in * ; do
if [[ "$in_file" =~ ^"$prefix"_(-{0,1}[0-9][0-9]*)$ ]]; then
num="${BASH_REMATCH[1]}";
[[ "$max" -lt "$num" ]] && max="$num";
fi
done
echo "$max"
shopt -u nullglob
return 0
}
我想这与正则表达式中的特殊字符有关,但我已经用尽了我所有的想法。
最佳答案
由于您要查找名称末尾的数字(以 _
为前缀),因此您可以这样做:
max=0
number='^[[:digit:]]+$'
for in_file in "${prefix}_"* ; do
num="${in_file##*_}"
[[ "$num" =~ $number ]] && [[ "$max" -lt "$num" ]] && max="$num"
done
num=$((max + 1))
我已经采纳了 @Jens 的出色建议来循环遍历匹配的文件。
关于linux - 查找新文件夹的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43917945/