У меня есть ситуация, где у меня есть следующее:
file01.ext
.
.
.
file99.ext
file100.ext
.
.
.
И я хочу к (использование переименовывают), вставляют '0' для файлов 01-99 (так, чтобы они стали 000-099), но не изменяют файлы, больше, чем 100. Какое выражение я должен использовать и что такое хороший источник при изучении регулярных выражений, таких как они?
В Windows I использовал бы Общего много Командующего, переименовывают функцию, которая имеет очень простой синтаксис переименования. Есть ли некоторые хорошие альтернативы для того инструмента (мультипереименовывают) для Ubuntu?
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
. Таким образом это должно работать над обычной командной строкой.
Это переименовывает с использованием различного 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
соответствия число.