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