Переименуйте несколько папок, используя регулярные выражения

Как видно из заголовка, я ищу команду / инструмент - предпочтительно что-то, запускаемое из терминала (я использую Ubuntu на удаленном сервере), который может заменить определенную часть нескольких каталогов одновременно. Структура папок выглядит следующим образом:

Example.of.Structure[app]

Another.Example[app]

Third.Example.of.Structure[app]

И я хочу переименовать все папки, чтобы часть [app] удалялась из названий папок.

Я попробовал побаловать себя с помощью обычного RegEx. Соответствие квадратным скобкам и тексту внутри.

Что, кажется, работает нормально, когда я использую его для «поиска» - но я действительно не уверен, как поместить это в команду.

Регулярное выражение, которое я придумал, чтобы найти текст в скобках (включая сами скобки), было: \[\w+\]

Но как мне поместить это в команду?

Благодаря.

1
задан 22 June 2019 в 14:19

1 ответ

Вам не нужно регулярное выражение для этого. Это сделает простое расширение оболочки с параметром:

$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/

(удалите echo, как только вы убедитесь, что предложенные замены верны).

Если вы хотите использовать инструмент на основе регулярных выражений, то на основе perl rename/prename очевидный выбор:

$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)

(удалите -n, как только вы будете рады Предлагаемые замены являются правильными).

Оба из них соответствуют первому вхождению паттерна. Если есть вероятность того, что шаблон [app] может появиться в другом месте, посмотрите на привязку соответствия к концу шаблона. См. Начало строки и конец строки якоря

0
ответ дан 22 June 2019 в 14:19

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

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