Добавьте переменную, которая считает каждую итерацию l oop. Затем используйте printf
для добавления начальных нулей.
#! /usr/bin/env bash
c=1
for f in *; do
mv -n "$f" "${prefix}_$(date -r "$f" +%Y%m%d)_$(printf %05d "$c").${f#*.}"
(( c++ ))
done
Здесь мы использовали фиксированную ширину из пяти цифр для порядкового номера. Если вы хотите использовать только необходимое количество цифр, вы можете использовать следующий подход:
#! /usr/bin/env bash
files=(*)
while read i; do
f="${files[10#$i]}"
mv -n "$f" "${prefix}_$(date -r "$f" +%Y%m%d)_$i.${f#*.}"
done < <(seq -w 0 "$((${#files[@]}-1))")
При этом будут использоваться цифры 1-ди git, если имеется только до 9 файлов, и 2 цифры, если есть всего 10–99 файлов, 3 цифры для 100–999 файлов и т. д.
Если вам интересно, что 10#$i
: Bash интерпретирует числа с ведущими нулями как восьмеричные числа, то есть 010 = 8 и 08 = ошибка. Чтобы правильно интерпретировать числа, сгенерированные seq -w
, мы указываем базу вручную, используя префикс 10#
.