пакетное переименование терминала mac os x
у меня есть папка с серией файлов с именем:
prefix_1234_567.png
prefix_abcd_efg.png
Я хотел бы пакетно удалить одно подчеркивание и среднее содержимое, чтобы вывод был
prefix_567.png
prefix_efg.png
спасибо
уместно, но не полностью объяснительно:
как я могу пакетно переименовывать файлы с помощью терминала?
Регулярное выражение для пакетного переименования файлов в OS X Terminal
7 ответов:
в вашем конкретном случае вы можете использовать следующие (
bashявляется оболочкой по умолчанию на macOS):for f in *.png; do echo mv "$f" "${f/_*_/_}"; doneПримечание: Если есть шанс, что ваши имена начинаются с
-, место--перед ними[1]:mv -- "$f" "${f/_*_/_}"Примечание:
echoв началеmvдля выполнения сухого прогона. Удалите его, чтобы выполнить фактическое переименование.вы можете запустить его из командной строки или использовать его в скрипт.
"${f/_*_/_}"применениеbashрасширения параметр: (первый) шаблон соответствия подстроки_*_заменяется на литерал_, эффективно вырезая средний токен из имени.- обратите внимание, что
_*_это pattern (выражение с подстановочными знаками, а также используемых для подстановки), а не регулярные выражения (чтобы узнать о шаблонах, запуститеman bashи искатьPattern Matching).
если вы часто находите себе пакетные переименования файлов,рассмотрите возможность установки специализированного инструмента, такого как Perl-based
renameутилиты. На macOS вы можете установить его с помощью популярного диспетчера пакетов доморощенного следующим образом:brew install renameвот эквивалент команды в верхней части с помощью
rename:rename -n -e 's/_.*_/_/' *.pngопять же, эта команда выполняет сухой запуск; remove
-nдля выполнения фактического переименования.
- аналогично
bashрешениеs/.../.../выполняет подстановку текста, но-в отличие отbash- правда регулярные выражения есть.
[1] цель специального аргумента
--, который поддерживается большинством утилит, должен сигнализировать, что последующие аргументы должны рассматриваться как операнды (значения), даже если они посмотреть как опции из-за начиная с-, а Jacob C. Примечание.
чтобы переименовать файлы, вы можете использовать
renameутилиты:
brew install renameнапример, чтобы изменить строку поиска во всех именах файлов в текущем каталоге:
rename -nvs searchword replaceword *удалите параметр 'n', чтобы применить изменения.
Подробнее:
man rename
вы можете использовать sed:
ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mvрезультат:
prefix_567.png prefix_efg.png*чтобы сначала выполнить сухой прогон, замените
mvСecho
У меня была партия файлов, которые выглядели так: be90-01.png и необходимо изменить тире, чтобы подчеркнуть. Я использовал это, что хорошо работало:
for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done
попробуй такое
for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; doneвот еще один способ:
for file in Name*.png; do mv "$file" "01_$file"; done
Comments