Loop Files, получить следующий номер

236
LifeLongLearner

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

 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
Я не уверен, что более эффективно, хотя и, возможно, лучше, использовать `ls [0-9] [0-9] [0-9] *. Txt | tail -n 1`, а затем увеличивать число в возвращаемом файл. AFH 7 лет назад 0
осторожно с регулярными выражениями. при условии отсутствия пробела перед числом в имени файла, вы бы хотели, чтобы `^ \ d \ d \ d` не совпадал с файлом типа` zzz - foo 111 bar.txt`. quixotic 7 лет назад 0

1 ответ на вопрос

0
janos

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

# 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=$  # get the next number ((next = num + 1))  # pad with zeros printf "%03d" $next 

Похожие вопросы