Ответ 1
В вашем конкретном случае вы можете использовать следующую команду bash
(bash
- это оболочка по умолчанию для macOS):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
Примечание: echo
добавляется к mv
, чтобы выполнить сухой прогон. Удалите его, чтобы выполнить фактическое переименование.
Вы можете запустить его из командной строки или использовать в script.
-
"${f/_*_/_}"
- это приложениеbash
расширение параметра: (первая) строка соответствия подстроки_*_
заменяется литералом_
, эффективно сокращая средний токен от имени. - Обратите внимание, что
_*_
- это шаблон (выражение подстановки, также используемое для globbing), а не регулярное выражение (чтобы узнать о шаблонах, запуститеman bash
и выполните поискPattern Matching
).
Если вы часто просматриваете файлы для переименования пакетов, рассмотрите специализированный инструмент, например, утилиту rename
, основанную на Perl.
В OSX вы можете установить его с помощью популярного менеджера пакетов Homebrew следующим образом: brew install rename
Здесь эквивалентная команда, использующая rename
:
rename -n -e 's/_.*_/_/' *.png
Опять же, эта команда выполняет сухой прогон; удалите -n
, чтобы выполнить фактическое переименование.
- Подобно решению
bash
,s/.../.../
выполняет замену текста, но - в отличие отbash
- используются обычные регулярные выражения.