Loop Files, obter o próximo número

1

Em um diretório eu tenho os seguintes arquivos:

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

No Bash, como eu obteria o próximo número numérico (ou seja, 003)?

Eu quero ignorar "aaa - *", "aab - *", "ZZZ - *" etc.



Atualmente, estou percorrendo todos os arquivos e usando \d\d\d em todos os arquivos para corresponder ao maior número

pseudocódigo:

min = 000

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

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

Tenho certeza de que existe um método mais eficiente (por exemplo, talvez usando ls ou similar).

    
por LifeLongLearner 17.02.2017 / 22:07

1 resposta

0

Você poderia fazer assim:

# 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
    
por 19.02.2017 / 23:37