Переименуйте файлы с четными числами

в первую очередь, сделайте все файлы видимыми (я имею в виду скрытые файлы), и попытайтесь искать в тех же файлах dir с "~" или как этот.

2
01.12.2014, 17:42
2 ответа

Вот являются переименовать командой:

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 из команды для переименования на файлах.

4
27.01.2020, 22:00

Работа в предположении, которое вы хотите умножить каждую страницу на 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
0
27.01.2020, 22:00

Теги

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