Пакетный/Много переименовывают только файлы с определенным диапазоном числа

У меня есть ситуация, где у меня есть следующее:

file01.ext
.
.
.
file99.ext
file100.ext
.
.
.

И я хочу к (использование переименовывают), вставляют '0' для файлов 01-99 (так, чтобы они стали 000-099), но не изменяют файлы, больше, чем 100. Какое выражение я должен использовать и что такое хороший источник при изучении регулярных выражений, таких как они?

В Windows I использовал бы Общего много Командующего, переименовывают функцию, которая имеет очень простой синтаксис переименования. Есть ли некоторые хорошие альтернативы для того инструмента (мультипереименовывают) для Ubuntu?

4
задан 15 December 2014 в 07:21

2 ответа

Используя rename

Обычно полезный инструмент для этого типа действия rename от perl пакет. Это применяет замену жемчуга к имени файла:

rename 's/file/file0/' file[0-9][0-9].ext

Как это работает:

  • s/file/file0/

    Это - a perl команда замены. Это заменяет возникновение file в имени файла с file0.

  • file[0-9][0-9].ext

    Это - список файлов это rename должен воздействовать на. [0-9] средства любое число от 0 до 9. [0-9][0-9] средства любые два числа, один после другого.

Страница справочника для rename здесь.

Примечание: Это требует perl версия rename. Существует также a rename утилита, которая является частью util-linux но это работает по-другому.

Используя bash

Этот подход использует a for цикл объединен с заменой шаблона:

for f in file[0-9][0-9].ext; do mv "$f" "${f/file/file0}"; done

Как это работает:

  • for f in file[0-9][0-9].ext; do

    Это запускает цикл по каждому имени файла, которое соответствует шарику file[0-9][0-9].ext.

  • mv "$f" "${f/file/file0}"

    Это переименовывает файлы с помощью замены шаблона удара. Это заменяет file с file0' в имени файла.

  • done

    Это отмечает конец for цикл.

Этот подход требует bash (или другая усовершенствованная оболочка).

bash интерактивная оболочка по умолчанию, и этот подход будет работать под bash. Таким образом это должно работать над обычной командной строкой.

5
ответ дан 1 December 2019 в 09:23

Это переименовывает с использованием различного regex:

rename -n 's/[^0-9](([0-9]){2})\.ext$/0$1.ext/' *

[^0-9](([0-9]){2})\.ext$ Соответствия любая нецифра [^0-9], сопровождаемая группой чисел с length=2, который является концами с .ext. Таким образом в сменной детали, добавьте 0 и группа печати подобранных $1 и затем их расширение.

Или альтернатива для regex:

rename -n 's/[^\d](\d{2})\.ext$/0$1.ext/' *

\d соответствия число.

1
ответ дан 17 November 2019 в 04:15

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

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