循环文件,获取下一个数字

循环文件,获取下一个数字

在目录中我有以下文件:

    000 - text.txt
    000 - info.txt
    001 - first.txt
    002 - second.txt
    aaa - more.txt
    ZZZ - text.txt
    ZZZ - info.txt

在 Bash 中,如何获取下一个数字(即 003)?

我想忽略“aaa - *”、“aab - *”、“ZZZ - *”等。



目前,我正在循环遍历所有文件并使用\d\d\d 所有文件来匹配最高数字

伪代码:

min = 000

for each file in directory
    if match \d\d\d > min
        max = match \d\d\d

printf %03d $((max + 1))

我确信有更有效的方法(例如,也许使用 ls 或类似方法)。

答案1

你可以这样做:

# loop over files that start with 3 digits
# the shell will naturally order them, the last will be the max
for last in [0-9][0-9][0-9]*; do :; done

# strip the first space and everything after it
num=${last%% *}

# get the next number
((next = num + 1))

# pad with zeros
printf "%03d" $next

相关内容