в первую очередь, сделайте все файлы видимыми (я имею в виду скрытые файлы), и попытайтесь искать в тех же файлах dir с "~" или как этот.
Вот являются переименовать командой:
rename -n 'our $i=2;s/^(\d+)-(\d+)/sprintf("$1-%04d", $i*$2)/e' *.png
Результат:
1-001.png renamed as 1-0002.png
1-002.png renamed as 1-0004.png
1-003.png renamed as 1-0006.png
1-004.png renamed as 1-0008.png
1-005.png renamed as 1-0010.png
...
2-001.png renamed as 2-0002.png
2-002.png renamed as 2-0004.png
2-003.png renamed as 2-0006.png
2-004.png renamed as 2-0008.png
2-005.png renamed as 2-0010.png
-n, --no-act No Action: show what files would have been renamed.
С наш $i
я определил глобальная переменная жемчуга , и я установил ее значение с 2
.
(\d +)-(\d +)
: (\d +)
соответствует началу имени файлов с одним или несколькими числами цифры, и сделайте его как получение группы и одно -
; с другой стороны с (\d +)
соответствие любое число после тире ( -
) в файлах называют и делают его как получение группы.
^
в начале ^ (\d +)-(\d +)
удостоверяется к предотвращению/пропуску, переименовывают файлы, если они не запуск ( ^
) с числами как a11.001.png
, и переименовывает файлы, только если они запускают с цифра-digit.png
.
sprintf (" % за 1-$04d", 2$i*$)
: Сначала получение группы печати с индексом 1$
(или его обратная ссылка) (относятся к первому (\d +)
в ^ (\d +)-(\d +)
), затем печатают новое расчетное значение группы 2$
с максимальными 4 шириной поля ( %4d
) и заполняют пустые поля 0s ( %04d
).
Примечание: Почему я использовал %04d
в команда sprintf
, потому что, когда вы хотите переименовать 1-001.png
к 1-002.png
, файл , 1-002.png
уже, существует, и вы не можете переименовать его. Таким образом, я добавил дополнительный нуль к передней стороне второго поля к предотвращению этой ошибки.
Или поскольку @muru предлагает, можно использовать обратные ссылки вместо глобальной переменной
rename -n 's/^(\d+)-(\d+)/sprintf("$1-%04d",$2*2)/e' *.png
, 1$
является обратной ссылкой первых (\d +)
и , 2$
являются обратной ссылкой вторых (\d +)
. Обратить внимание, что необходимо использовать пару круглых скобок (группа)
для создания его как получения группы.
В конце можно удалить опция-n
из команды для переименования на файлах.
Работа в предположении, которое вы хотите умножить каждую страницу на 2,
#!/bin/sh
tmpext=tmpext # temporary extension to avoid clobbering existing files
# double the page number and change .png to tmpext
for page in ./*-[[:digit:]][[:digit:]][[:digit:]].png; do
vol=${page%-*}
num=${page#$vol-}
num=${num%.png}
zeroes=${num%%[!0]*}
num=${num#$zeroes}
tmppage=${vol}-$(printf %.3d $((num * 2))).$tmpext
mv -vi "$page" "$tmppage"
done
# move .tmpext back to .png
for tmppage in ./*."$tmpext"; do
mv -vi "${tmppage}" "${tmppage%$tmpext}png"
done