Как уменьшить имя файла на 1 в человечности

У меня есть приблизительно 200 .png файлы в моей папке, называя как -

02.png
03.png
04.png
...
201.png

Поскольку Вы видите, что я не имею 01.png таким образом, я хочу переименовать все файлы, уменьшающиеся одним, сделать его как -

01.png
02.png
03.png
...
200.png

Это действительно ли возможно сделать это через какую-либо команду в человечности?

Следующее является командой, которую я пробую без удачи -

rename -n '/d{2}\.png$d{2}-1\.png/' *.png
5
задан 22 September 2015 в 23:36

1 ответ

Это может быть сделано с несколько более сложным rename команда:

rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) . ".png"/e' *.png

Примечания:

  • Необходимо разделить соответствие и замену с a /.
  • Необходимо сгруппировать часть, которую Вы хотите не забыть использовать $1 с () (в этом случае (\d{2,3})).
  • Необходимо соответствовать и 2-и 3-разрядные числа, или 100.png станет 1-1.png.
  • Для использования арифметики или функций в замене это должно быть оценено как выражение, вот почему существует a e после закрытия /.
  • Для объединения строк в оцененном выражении необходимо использовать . (следовательно . ".png").
  • Для заполнения строк нулями (по-видимому, что Вы хотите, начиная с, Ваши исходные файлы имели их), использовать sprintf. %02d заполнит нулями, если Ваше число не будет иметь по крайней мере двух цифр.

Пример:

$ rename -n 's/(\d{2,3}).png/sprintf("%02d", $1-1) .  ".png"/e' *.png | head
02.png -> 01.png
03.png -> 02.png
04.png -> 03.png
05.png -> 04.png
06.png -> 05.png
07.png -> 06.png
08.png -> 07.png
09.png -> 08.png
100.png -> 99.png
101.png -> 100.png

В зависимости от версии rename, это могло бы испытать затруднения при переименовании файлов, если цель уже существует. В таких случаях простое обходное решение должно создать временный каталог и переименовать/переместить файлы там:

mkdir temp
rename -n 's/(\d{2,3}).png/sprintf("temp\/%02d", $1-1) . ".png"/e' *.png

Отметьте это / после temp потребности, которых оставят, или это будет взято в качестве финала / из a s// команда.

6
ответ дан 23 November 2019 в 09:13

Другие вопросы по тегам:

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