Как уменьшить число в списке имен файлов с помощью sed или аналогичного инструмента

У меня есть список файлов, пронумерованных в имени файла, начиная, например. на 013 (или другой счет), но хочу, чтобы они начинались с 001. Я не возражаю против используемого инструмента (awk, sed, mv, tr, что угодно...)

Пример (до -> после):

img013.tif -> img001.tif
img014.tif -> img002.tif
...

и т.п.

Цените любую помощь. 1000 х спасибо, Роланд


person Roland    schedule 18.01.2017    source источник


Ответы (1)


Поскольку выражение glob извлекает список файлов в алфавитном (буквенно-цифровом) порядке, вы можете просто использовать это:

#!/bin/bash

i=0
# The loop iterates over tif files in alphanumerical order
for file in *.tif ; do
    mv -v "$file" "img$(printf "%03d" "$i").tif"
    i=$((i+1))
done
person hek2mgl    schedule 18.01.2017
comment
Спасибо. ОМГ, так просто. И я не видел этого вчера, потому что я пробовал реальную базу переименования с расчетом на -12, маскирование с помощью sed и т. д. - person Roland; 19.01.2017
comment
Конечно, это может быть только так просто, потому что я предполагаю, что входные файлы появляются непрерывно, например, 013, 014, 015,.., я имею в виду без пробелов. В противном случае вам действительно нужно было бы выполнять математику, если необходимо сохранить пробелы. - person hek2mgl; 19.01.2017