Как видно из заголовка, я ищу команду / инструмент - предпочтительно что-то, запускаемое из терминала (я использую Ubuntu на удаленном сервере), который может заменить определенную часть нескольких каталогов одновременно. Структура папок выглядит следующим образом:
Example.of.Structure[app]
Another.Example[app]
Third.Example.of.Structure[app]
И я хочу переименовать все папки, чтобы часть [app] удалялась из названий папок.
Я попробовал побаловать себя с помощью обычного RegEx. Соответствие квадратным скобкам и тексту внутри.
Что, кажется, работает нормально, когда я использую его для «поиска» - но я действительно не уверен, как поместить это в команду.
Регулярное выражение, которое я придумал, чтобы найти текст в скобках (включая сами скобки), было: \[\w+\]
Но как мне поместить это в команду?
Благодаря.
Вам не нужно регулярное выражение для этого. Это сделает простое расширение оболочки с параметром:
$ 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]
может появиться в другом месте, посмотрите на привязку соответствия к концу шаблона. См. Начало строки и конец строки якоря