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

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

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

Example.of.Structure[app]

Another.Example[app]

Third.Example.of.Structure[app]

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

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

Кажется, это работает отлично, когда я использую его для"найти его"- но я действительно не уверен, как это оформить в виде команды.

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

Но как мне оформить это в виде команды?

Спасибо.

решение1

Вам на самом деле не нужно регулярное выражение для этого. Простой shell glob плюс расширение параметра сделают это:

$ 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как только убедитесь, что предложенные замены верны).

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

$ 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]может встретиться где-то еще, рассмотрите возможность привязки соответствия к концу шаблона. СмотритеЯкоря начала и конца строки

Связанный контент