1

В каталоге у меня есть следующие файлы:

    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 ответ1

0

Вы могли бы сделать так:

# 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .