LINUX.ORG.RU

цикл в bash: цифры с нулями впереди


0

1

Есть скрипт, который запускает некую утилитку с параметром номера в конце имени файла, вот так примерно:

for ((i=1; i<=100;i++)) ; do ./util -d $i; done

Но файлы у меня называются ХХХ001, ХХХ002, ..., ХХХ045, ..., ХХХ100. Поэтому программа пишет что файл не найден, т.к. файл не «1» а «001».

Как сделать в bash, чтобы выводилось 001, 002, и т.д.?

for ((i=1; i<=10;i++)) ; do ./util -d `printf '%03i'` $i; done

lazyklimm ★★★★★
()

cormorant> for ((i=1; i<=100;i++)) ; do ./util -d $i; done

Третий способ:

for i in $(seq -w 1 100); do ./util -d $i; done

sdio ★★★★★
()
Ответ на: комментарий от n01r

Да, с 4й версии баш таки научился

я побуду занудой и в очередной раз полезу с zsh в калашный ряд
for i in {001..100};./util -d $i

zolden ★★★★★
()
Ответ на: комментарий от do0dlez

Спасибо, ага

Всё работает. Сделал так:

for i in $(seq -w $firstDay $lastDay); do ./util -d $i done

Только оказалось, что эта утилитка сама принимает параметр как число, пишет всё равно:

Error opening file: ./ZHP.A.2011.45 (No such file or directory) totalsamps=0 Error reading (null): Generic error

Программа на с, но лезть туда возможности нет. Решил сначала файлы переименовать файлы так:

for i in $(seq 1 365); do mv ZHP.A.2010.$(printf «%03d» $i) ZHP.A.2010.$i; done

Работает, но пишет: mv: «ZHP.A.2010.365» и «ZHP.A.2010.365» - один и тот же файл... А так всё, спасибо!

cormorant
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.