linux - 查找新文件夹的索引

标签 linux bash shell

我被赋予了一个名字,我应该用这个名字创建一个目录。如果此目录已存在,则文件夹名称应以 _$number 作为后缀。

数字的计算方式为最大值 + 1。示例:

Name:awesome
Files: dummy awesome awesome_2 awesome_4 dummy_3
New folder: awesome_5

Name: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/

相关文章:

linux - 评估文件中的 shell 命令

shell - 如何处理 JMESPath 包含可能为空的属性的过滤器?

regex - sed 命令在 block /段落后插入行并在文件中进行更改

python - 从不同的路径调用 python 脚本并更改路径

linux - 如何在awk中解析单词?

C sys/stat.h 并非 stat 结构的每个字段都被初始化

bash - 基于文件位置而不是当前工作目录的相对路径

bash - 如何从 lspci 中提取 pci 代码

c - 尝试从内核空间将结构写入 proc 文件

linux - 在此处文档后使用 bash 语法