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